koa json rpc powered by jayson
$ npm i koa-jayson-rpc --saveconst Rpc = require('koa-jayson-rpc')new Rpc with a jayson.Server instance
new Rpc with a methods map same as jayson.Server(methods)
new Rpc with a methods map load from methodsDir,
and methodsDirOptions passed to require-directory module
the
rpcinstance can be used as koa middleware or handler
use koa-mount if you need server work on the /jsonrpc path
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))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'})
}method¶ms&id&jsonrpc: orderctx.params>ctx.request.body>ctx.query- use
koa-qsfor passObject paramsorArray paramswithGETrequestArray:params[]=1¶ms[]=2Array:params[0]=1¶ms[1]=2Object:params[name]=1¶ms[age]=2
the MIT License http://magicdawn.mit-license.org