0.0.1 • Published 5 years ago

koa-jayson-rpc v0.0.1

Weekly downloads
3
License
MIT
Repository
github
Last release
5 years ago

koa-jayson-rpc

koa json rpc powered by jayson

Build Status Coverage Status npm version npm downloads npm license

Install

$ npm i koa-jayson-rpc --save

API

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

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

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&params[]=2
    • Array: params[0]=1&params[1]=2
    • Object: params[name]=1&params[age]=2

Changelog

CHANGELOG.md

License

the MIT License http://magicdawn.mit-license.org