2021-12-03 17:58:48 +01:00

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;