rpcclient: refactor error handling.

This commit is contained in:
Christopher Jeffrey 2017-02-21 22:33:54 -08:00
parent 89160bdfa8
commit 47c43ea39a
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
4 changed files with 35 additions and 12 deletions

10
bin/cli
View File

@ -476,7 +476,15 @@ CLI.prototype.rpc = co(function* rpc() {
params.push(param);
}
result = yield this.client.rpc.call(method, params);
try {
result = yield this.client.rpc.execute(method, params);
} catch (e) {
if (e.type === 'RPCError') {
this.log(e.message);
return;
}
throw e;
}
this.log(result);
});

View File

@ -8,6 +8,7 @@
var Network = require('../protocol/network');
var request = require('./request');
var util = require('../utils/util');
var co = require('../utils/co');
/**
@ -44,7 +45,7 @@ function RPCClient(options) {
* @returns {Promise} - Returns Object?.
*/
RPCClient.prototype.call = co(function* call(method, params) {
RPCClient.prototype.execute = co(function* execute(method, params) {
var res = yield request({
method: 'POST',
uri: this.uri,
@ -62,20 +63,34 @@ RPCClient.prototype.call = co(function* call(method, params) {
});
if (!res.body)
return;
throw new Error('No body for JSON-RPC response.');
if (res.statusCode === 400)
return res.body.result;
if (res.body.error)
throw new RPCError(res.body.error.message, res.body.error.code);
if (res.statusCode !== 200) {
if (res.body.error)
throw new Error(res.body.error.message);
if (res.statusCode !== 200)
throw new Error('Status code: ' + res.statusCode);
}
return res.body.result;
});
/*
* Helpers
*/
function RPCError(msg, code) {
Error.call(this);
if (Error.captureStackTrace)
Error.captureStackTrace(this, RPCError);
this.type = 'RPCError';
this.message = msg + '';
this.code = code >>> 0;
}
util.inherits(RPCError, Error);
/*
* Expose
*/

View File

@ -580,8 +580,6 @@ HTTPServer.prototype._init = function _init() {
try {
json = yield this.rpc.execute(cmd);
} catch (err) {
this.logger.error(err);
if (err.type === 'RPCError') {
out.push({
result: null,
@ -594,6 +592,8 @@ HTTPServer.prototype._init = function _init() {
continue;
}
this.logger.error(err);
out.push({
result: null,
error: {

View File

@ -146,7 +146,7 @@ describe('HTTP', function() {
}));
it('should execute an rpc call', co(function* () {
var info = yield wallet.client.rpc.call('getblockchaininfo', []);
var info = yield wallet.client.rpc.execute('getblockchaininfo', []);
assert.equal(info.blocks, 0);
}));