use Error object for errors

Fixes GH-11
This commit is contained in:
freewil 2012-04-25 21:03:12 -04:00
parent 8f1ef895fa
commit 6faf577332
2 changed files with 36 additions and 24 deletions

View File

@ -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);
}
});
});
};

View File

@ -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);
},
},