use Error object for errors
Fixes GH-11
This commit is contained in:
parent
8f1ef895fa
commit
6faf577332
@ -59,33 +59,45 @@ var Client = function(port, host, user, password) {
|
||||
// depending on whether it's got a result or an error, we call
|
||||
// emitSuccess or emitError on the promise.
|
||||
response.on('end', function() {
|
||||
var err;
|
||||
|
||||
try {
|
||||
var decoded = JSON.parse(buffer);
|
||||
} catch (e) {
|
||||
if (response.statusCode !== 200) {
|
||||
errback({
|
||||
code: -32602,
|
||||
message: 'Invalid params, response status code: ' + response.statusCode
|
||||
});
|
||||
err = new Error('Invalid params, response status code: ' + response.statusCode);
|
||||
err.code = -32602;
|
||||
errback(err);
|
||||
} else {
|
||||
errback({
|
||||
code: -32603,
|
||||
message: 'Problem parsing JSON response from server'
|
||||
});
|
||||
err = new Error('Problem parsing JSON response from server');
|
||||
err.code = -32603;
|
||||
errback(err);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(decoded.hasOwnProperty('error') && decoded.error != null) {
|
||||
if (errback)
|
||||
errback(decoded.error);
|
||||
} else if(decoded.hasOwnProperty('result')) {
|
||||
if (callback)
|
||||
|
||||
if (decoded.hasOwnProperty('error') && decoded.error != null) {
|
||||
if (errback) {
|
||||
err = new Error(decoded.error.message || '');
|
||||
if (decoded.error.code) {
|
||||
err.code = decoded.error.code;
|
||||
}
|
||||
errback(err);
|
||||
}
|
||||
} else if (decoded.hasOwnProperty('result')) {
|
||||
if (callback) {
|
||||
callback(decoded.result);
|
||||
}
|
||||
} else {
|
||||
if (errback) {
|
||||
err = new Error(decoded.error.message || '');
|
||||
if (decoded.error.code) {
|
||||
err.code = decoded.error.code;
|
||||
}
|
||||
errback(err);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (errback)
|
||||
errback(decoded.error);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
14
test/api.js
14
test/api.js
@ -143,11 +143,10 @@ vows.describe('api').addBatch({
|
||||
topic: function(client) {
|
||||
client.cmd('nomethod', this.callback);
|
||||
},
|
||||
'should create non-null err in callback': function(err, expectedValue) {
|
||||
assert.deepEqual(err, {
|
||||
code: -32601,
|
||||
message: 'Method not found'
|
||||
});
|
||||
'should pass Error object in callback': function(err, expectedValue) {
|
||||
assert.instanceOf(err, Error);
|
||||
assert.equal(err.message, 'Method not found');
|
||||
assert.equal(err.code, -32601);
|
||||
assert.equal(expectedValue, undefined);
|
||||
},
|
||||
},
|
||||
@ -168,8 +167,9 @@ vows.describe('api').addBatch({
|
||||
client.getDifficulty(this.callback);
|
||||
},
|
||||
'and should be able to handle it': function(err, difficulty) {
|
||||
assert.isNotNull(err);
|
||||
assert.isObject(err);
|
||||
assert.instanceOf(err, Error);
|
||||
assert.equal(err.message, 'Invalid params, response status code: 401');
|
||||
assert.equal(err.code, -32602);
|
||||
assert.equal(difficulty, undefined);
|
||||
},
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user