plv8
Version:
require() node.js modules in plv8
146 lines (104 loc) • 3.65 kB
Markdown
in [PLV8](https://github.com/plv8/plv8). Optimize your Node.js Backend by offloading work directly onto the database (PostgreSQL). Send/receive events between Node and PLV8.
```sh
$ npm install --save plv8
```
Install a Node module which can be loaded into the plv8 context by using the `require()` method.
Remove a previously installed module.
Evaluate a block of Javascript on the fly.
Listen for a Postgres [NOTIFY](https://www.postgresql.org/docs/9.5/static/sql-notify.html) event, and invoke the given `handler` when the event is emitted.
Load an installed Node module.
Send a log message to the Node.js application.
Emit an aribtrary event to the Node.js application via [NOTIFY](https://www.postgresql.org/docs/9.5/static/sql-notify.html).
```js
// setup plv8 connection
const PLV8 = require('plv8')
const plv8 = new PLV8({
client: 'pg',
connection: {
// knex.js connection object
}
})
// setup a log listener
plv8.on('log:error', msg => {
console.error(msg)
})
// setup a listener
plv8.on('user:updated', user => {
// do some stuff with the "user" object
})
// install the lodash module so that it can be loaded (via require()) later
plv8.install(require.resolve('lodash'))
.then(() => {
// eval some code
return plv8.eval(() => {
const _ = require('lodash')
return _.map([ 1, 2, 3 ], e => e + 1)
})
})
.then(result => {
// result = [ 2, 3, 4 ]
})
```
```js
// send some events to the client
plv8.eval(() => {
const _ = require('lodash')
const veryImportantValue = _.map([ 1, 2, 3 ], e => e + 1)
// maybe I want to send this event to the client, but continue doing more things
plv8.emit('user:updated', {
username: 'tjwebb',
email: 'tjwebb@langa.io'
})
try {
return veryImportantValue + 1
}
catch (e) {
plv8.log('error', e)
return 0
}
})
```
This module requires the [plv8](https://pgxn.org/dist/plv8/doc/plv8.html) Postgres extension.
```sh
$ easy_install pgxnclient
$ pgxnclient install plv8
```
This is a fork of [plv8x](https://github.com/clkao/plv8x) that has been streamlined down to the essentials, and extended with additional API features. Important differences:
- 90%+ smaller than plv8x (~20kb vs. 300+ kb)
- Removed [node-pg-native](https://github.com/brianc/node-pg-native)
- Removed Livescript / Coffeescript Support
- Removed CLI
- Removed unused/unneeded dependencies
- Transpile modules using babel instead of browserify
## License
MIT
## Maintained By
[<img src='http://i.imgur.com/Y03Jgmf.png' height='64px'>](http://langa.io)
[ ]: https://img.shields.io/npm/v/plv8.svg?style=flat-square
[ ]: https://npmjs.org/package/plv8
[ ]: https://img.shields.io/travis/langateam/node-plv8/master.svg?style=flat-square
[ ]: https://travis-ci.org/langateam/node-plv8
[ ]: http://img.shields.io/david/langateam/node-plv8.svg?style=flat-square
[ ]: https://david-dm.org/langateam/node-plv8
[ ]: https://img.shields.io/codeclimate/github/langateam/node-plv8.svg?style=flat-square
[ ]: https://codeclimate.com/github/langateam/node-plv8
[![NPM version][npm-image]][npm-url]
[![Build status][ci-image]][ci-url]
[![Dependency Status][daviddm-image]][daviddm-url]
[![Code Climate][codeclimate-image]][codeclimate-url]
`require()` node modules