faye
Version:
Simple pub/sub messaging for the web
56 lines (46 loc) • 1.58 kB
JavaScript
;
var Class = require('../util/class'),
Grammar = require('./grammar');
var Error = Class({
initialize: function(code, params, message) {
this.code = code;
this.params = Array.prototype.slice.call(params);
this.message = message;
},
toString: function() {
return this.code + ':' +
this.params.join(',') + ':' +
this.message;
}
});
Error.parse = function(message) {
message = message || '';
if (!Grammar.ERROR.test(message)) return new Error(null, [], message);
var parts = message.split(':'),
code = parseInt(parts[0]),
params = parts[1].split(','),
message = parts[2];
return new Error(code, params, message);
};
// http://code.google.com/p/cometd/wiki/BayeuxCodes
var errors = {
versionMismatch: [300, 'Version mismatch'],
conntypeMismatch: [301, 'Connection types not supported'],
extMismatch: [302, 'Extension mismatch'],
badRequest: [400, 'Bad request'],
clientUnknown: [401, 'Unknown client'],
parameterMissing: [402, 'Missing required parameter'],
channelForbidden: [403, 'Forbidden channel'],
channelUnknown: [404, 'Unknown channel'],
channelInvalid: [405, 'Invalid channel'],
extUnknown: [406, 'Unknown extension'],
publishFailed: [407, 'Failed to publish'],
serverError: [500, 'Internal server error']
};
for (var name in errors)
(function(name) {
Error[name] = function() {
return new Error(errors[name][0], arguments, errors[name][1]).toString();
};
})(name);
module.exports = Error;