Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/weisjohn/sleepyhollow-node
Node.js binder for two-way communication with PhantomJS.
https://github.com/weisjohn/sleepyhollow-node
Last synced: about 1 month ago
JSON representation
Node.js binder for two-way communication with PhantomJS.
- Host: GitHub
- URL: https://github.com/weisjohn/sleepyhollow-node
- Owner: weisjohn
- License: mit
- Created: 2014-05-22T01:07:35.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2015-02-18T07:36:41.000Z (almost 10 years ago)
- Last Synced: 2024-11-08T19:47:50.676Z (about 2 months ago)
- Language: JavaScript
- Homepage:
- Size: 255 KB
- Stars: 10
- Watchers: 2
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
sleepyhollow-node
==========Node.js binder for two-way communication with PhantomJS. An IPC library in two modules, used in conjunction with [sleepyhollow-phantom](https://github.com/weisjohn/sleepyhollow-phantom), via `stdin` and `stderr`. No `socket.io` or server-page hacks required. Sleepyhollow supports sending and receiving any [JSON serialzable data](http://www.json.org/) type.
### usage
To send and receive messages from Node.js to PhantomJS, require and invoke `sleepyhollow-node`. This returns an `EventEmitter` instance, which allows you to implement your own message passing system. It supports both event names as well as
```
var sleepyhollow = require('sleepyhollow-node');
var drjekyll = sleepyhollow('./node_modules/sleepyhollow-phantom/examples/simple.js');drjekyll.emit('render', "http://example.com/");
drjekyll.on('rendered', function() {
console.log('a page was rendered');
drjekyll.emit('end');
});
```#### sleepyhollow([...options], path)
Arguments:
1. options: Array: optional [advanced options](http://phantomjs.org/api/command-line.html) to be passed to PhantomJS.
2. path: String: the path to your PhantomJS code to run (using sleepyhollow-phantom)[See the usage example for the corresponding PhantomJS code](https://github.com/weisjohn/sleepyhollow-phantom#usage).
Example:
```javascript
var drjekyll = sleepyhollow('--ignore-ssl-errors=true', 'myscript.js');
```#### emit(event, [param])
Arguments:
1. event - String: name of the event
2. param - Mixed: optional, any `JSON.stringify()`-able value is supportedReturns: null
Example:
```javascript
drjekyll.emit("fetch", url);
```#### on(event, listener)
Arguments:
1. event - String: name of the event
2. listener - Function(Mixed): receives a optional `JSON.stringify()`-able valueExample:
```javascript
drjekyll.on('payload', function(obj) {
console.log(obj.prop);
})
```### errors
The error support in PhantomJS isn't the best. `sleepyhollow` provides one custom event to listen for errors in your script:
```
var sleepyhollow = require('sleepyhollow-node');
var drjekyll = sleepyhollow('some-phantom-script.js');
drjekyll.on('error', function(data) {
console.log(data);
});
```Anything that comes across `stdout` will be passed over to the `error` event handler, so if you `console.log` in your PhantomJS code, it will be sent to that handler.
### exit
If the child `phantomjs` process exits, an `exit` event is emitted.
```javascript
drjekyll.on('exit', function() {
console.log("phantom exited");
process.exit();
});
```If your Node process is exiting, sleepyhollow sends a `SIGINT` to tear down the phantomjs side.
### examples
See the [examples](examples) folder, these can be run with `node`.
### testing
```
$ npm test
```