sleepyhollow-node
Version:
Node.js binder for two-way communication with PhantomJS
107 lines (67 loc) • 2.79 kB
Markdown
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 supported
Returns: 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 value
Example:
```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
```