https://github.com/magicdawn/koa-jayson-rpc
koa json rpc powered by jason
https://github.com/magicdawn/koa-jayson-rpc
Last synced: 2 months ago
JSON representation
koa json rpc powered by jason
- Host: GitHub
- URL: https://github.com/magicdawn/koa-jayson-rpc
- Owner: magicdawn
- License: mit
- Created: 2019-06-21T13:14:29.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-06-22T08:34:24.000Z (about 7 years ago)
- Last Synced: 2025-04-02T17:01:40.914Z (over 1 year ago)
- Language: JavaScript
- Size: 9.77 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# koa-jayson-rpc
> koa json rpc powered by jayson
[](https://travis-ci.org/magicdawn/koa-jayson-rpc)
[](https://codecov.io/gh/magicdawn/koa-jayson-rpc)
[](https://www.npmjs.com/package/koa-jayson-rpc)
[](https://www.npmjs.com/package/koa-jayson-rpc)
[](http://magicdawn.mit-license.org)
## Install
```sh
$ npm i koa-jayson-rpc --save
```
## API
```js
const Rpc = require('koa-jayson-rpc')
```
### `rpc = new Rpc(options)`
#### `options.server`
new `Rpc` with a `jayson.Server` instance
#### `options.methods`
new `Rpc` with a `methods` map same as `jayson.Server(methods)`
#### `options.methodsDir` & `options.methodsDirOptions`
new `Rpc` with a `methods` map load from `methodsDir`,
and `methodsDirOptions` passed to `require-directory` module
### `app.use(rpc)`
> the `rpc` instance can be used as koa middleware or handler
#### use `koa-mount`
use `koa-mount` if you need server work on the `/jsonrpc` path
```js
const Koa = require('koa')
const mount = require('koa-mount')
const Rpc = require('koa-jayson-rpc')
const app = Koa()
const rpc = new Rpc({methodsDir: 'some-directory'})
app.use(mount('/jsonrpc', rpc))
```
#### use impress-router
```js
const setupKoaApp = () => {
const Koa = require('koa')
const Router = require('impress-router')
const app = new Koa()
const router = new Router()
router.augmentApp(app)
require('koa-onerror')(app)
require('koa-qs')(app, 'extended')
// post body
const bodyParser = require('koa-bodyparser')
app.use(
bodyParser({
formLimit: '5mb',
jsonLimit: '5mb',
textLimit: '5mb',
})
)
return app
}
async function main() {
const rpc = new Rpc({methodsDir: __dirname + '/fixtures/server'})
const app = setupKoaApp()
// use rpc middleware
app.all('/jsonrpc', rpc)
app.all('/jsonrpc/:method', rpc)
const server = app.callback()
let json
json = await request(server)
.post('/jsonrpc')
.send({method: 'echo', params: {test: 'middleware works'}})
.then(res => res.body)
json.result.should.eql({test: 'middleware works'})
// use params.method
json = await request(server)
.post('/jsonrpc/echo')
.send({params: {test: 'params route works too'}})
.then(res => res.body)
json.result.should.eql({test: 'params route works too'})
}
```
##### Notice
- `method` & `params` & `id` & `jsonrpc`: order `ctx.params` > `ctx.request.body` > `ctx.query`
- use `koa-qs` for pass `Object params` or `Array params` with `GET` request
- `Array`: `params[]=1¶ms[]=2`
- `Array`: `params[0]=1¶ms[1]=2`
- `Object`: `params[name]=1¶ms[age]=2`
## Changelog
[CHANGELOG.md](CHANGELOG.md)
## License
the MIT License http://magicdawn.mit-license.org