84 lines
2.4 KiB
JavaScript
84 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
var util = require('util');
|
|
var _ = require('lodash');
|
|
|
|
var HttpError = require('./HttpError');
|
|
var helpers = require('./../helpers');
|
|
|
|
|
|
/**
|
|
* Base RestError class. inherits from WError.
|
|
* Variadic signature, first two are special to Restify, using a opts obj.
|
|
* 1) new RestError(anotherErr, {...});
|
|
* 2) new RestError({...});
|
|
* Last one is a straight pass through to WError
|
|
* 3) new RestError('my special error message');
|
|
* @public
|
|
* @class
|
|
*/
|
|
function RestError() {
|
|
|
|
var self = this;
|
|
var parsed = helpers.parseVErrorArgs(arguments);
|
|
var opts = parsed.internalOpts;
|
|
|
|
// call super
|
|
HttpError.apply(self, _.toArray(arguments));
|
|
|
|
/**
|
|
* a bit of a misnomer, not really an http code, but rather the name
|
|
* of the error. the equivalent of HttpCode's `code` property.
|
|
* TODO: Not sure why the default here is 'Error' and not 'RestError'?
|
|
* only set the value if it doesnt already exist, as it's defined on the
|
|
* prototype for subclasses.
|
|
* @property
|
|
* @type {String}
|
|
*/
|
|
if (opts.restCode) {
|
|
self.restCode = opts.restCode;
|
|
}
|
|
|
|
/**
|
|
* an object used to render the error when passed
|
|
* to res.send()
|
|
* @property
|
|
* @type {Object}
|
|
*/
|
|
self.body = {
|
|
// err.code/err.restCode is used by legacy restify paths, probably
|
|
// originally created to emulate the code property that is created by
|
|
// some native core module errors (i.e., a failed fs.readFile will
|
|
// return a ENOENT error with a err.code of ENOENT).
|
|
//
|
|
// for Http/RestErrors, the code will be the error name but with
|
|
// 'error' truncated from the string. i.e., if the error name is
|
|
// InternalServerError, the code is InternalServer.
|
|
code: opts.restCode || self.restCode,
|
|
message: self.message || ''
|
|
};
|
|
}
|
|
util.inherits(RestError, HttpError);
|
|
|
|
/**
|
|
* assign non-standard display name property on the CONSTRUCTOR (not prototype),
|
|
* which is supported by all VMs. useful for stack trace output.
|
|
* @type {String}
|
|
*/
|
|
RestError.displayName = 'RestError';
|
|
|
|
/**
|
|
* the name of the error, used in the stack trace output
|
|
* @type {String}
|
|
*/
|
|
RestError.prototype.name = 'RestError';
|
|
|
|
/**
|
|
* the default rest code. i.e., a BadDigestError has a restCode of 'BadDigest'.
|
|
* @type {String}
|
|
*/
|
|
RestError.prototype.restCode = 'Error';
|
|
|
|
|
|
module.exports = RestError;
|