node + express + jQueryでJSON-RPC
GithubでjqueryでJSON-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すごい楽!!
その他のコードはこちら
test at master from hagino3000/jquery-jsonrpc2.0 - GitHub
https://github.com/hagino3000/jquery-jsonrpc2.0/tree/master/test