hagino3000's blog

平成アーカイブス (更新停止)

node + express + jQueryでJSON-RPC

GithubjqueryJSON-RPCするためのライブラリを公開していたのだが、何も考えずにPull Requestを取りこんでいたら全く動かない上に、読解不能かつバグの塊の様な状態になっていた。そろそろ自分で使いたくなったのでテストコードを書いてバグfixした。

テストする対象の性質上サーバーが必須になるので、今調査中のnode + expressで用意する事にした。


エンドポイントのコードはこんな風に書いてみた

// RPC end point
app.post('/rpc', function(req, res) {
  res.header('Content-Type', 'application/json');
  var data = req.body, err = null, rpcMethod;

  if (!err && data.jsonrpc !== '2.0') {
    onError({
      code: -32600,
      message: 'Bad Request. JSON RPC version is invalid or missing',
      data: null
    }, 400);
    return;
  }

  if (!err && !(rpcMethod = rpcMethods[data.method])) {
    onError({
      code: -32601,
      message: 'Method not found : ' + data.method
    }, 404);
    return;
  }

  try {
    rpcMethod(data.params, {
      onSuccess: function(result) {
        res.send(JSON.stringify({
          jsonrpc: '2.0',
          result: result,
          error : null,
          id: data.id
        }), 200);
      },
      onFailure: function(error) {
        onError({
          code: -32603,
          message: 'Failed',
          data: error
        }, 500);
      }
    });
  } catch (e) {
    onError({
      code: -32603,
      message: 'Excaption at method call',
      data: e
    }, 500);
  }
  return;

  function onError(err, statusCode) {
    res.send(JSON.stringify({
      jsonrpc: '2.0',
      error: err,
      id: data.id
    }), statusCode);
  }
});


expressすごい楽!!

その他のコードはこちら