98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
// Copyright 2012 Mark Cavage, Inc. All rights reserved.
|
|
|
|
'use strict';
|
|
|
|
var util = require('util');
|
|
|
|
var _ = require('lodash');
|
|
|
|
var RestError = require('./baseClasses/RestError');
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
// local global vars
|
|
//------------------------------------------------------------------------------
|
|
|
|
var CODES = {
|
|
BadDigest: 400,
|
|
BadMethod: 405,
|
|
ConnectTimeout: 408,
|
|
Internal: 500,
|
|
InvalidArgument: 409,
|
|
InvalidContent: 400,
|
|
InvalidCredentials: 401,
|
|
InvalidHeader: 400,
|
|
InvalidVersion: 400,
|
|
MissingParameter: 409,
|
|
NotAuthorized: 403,
|
|
RequestExpired: 400,
|
|
RequestThrottled: 429,
|
|
ResourceNotFound: 404,
|
|
WrongAccept: 406
|
|
};
|
|
|
|
|
|
|
|
|
|
var restErrors = _.reduce(CODES, function(acc, statusCode, errorCode) {
|
|
|
|
|
|
// append Error to the end of the name if it doesn't already end with it.
|
|
// this becomes the name of the constructor
|
|
var name = errorCode + 'Error';
|
|
|
|
// this is a dynamic constructor for an error message.
|
|
// arguments are variadic. constructor fn name must be anonymous.
|
|
/**
|
|
* Variadic signature, first two are special to Restify, using a options
|
|
* obj.
|
|
* 1) new [Dynamic]Error(anotherErr, {...});
|
|
* 2) new [Dynamic]Error({...});
|
|
* Last one is a straight pass through to WError
|
|
* 3) new [Dynamic]Error('my special error message');
|
|
* @public
|
|
* @class
|
|
*/
|
|
acc[name] = function() {
|
|
// call super
|
|
RestError.apply(this, arguments);
|
|
};
|
|
util.inherits(acc[name], RestError);
|
|
|
|
/**
|
|
* assign non-standard display name property on the CONSTRUCTOR (not
|
|
* prototype), which is supported by all VMs. useful for stack trace
|
|
* output.
|
|
* @type {String}
|
|
*/
|
|
acc[name].displayName = name;
|
|
|
|
/**
|
|
* the name of the error, used in the stack trace output
|
|
* @type {String}
|
|
*/
|
|
acc[name].prototype.name = name;
|
|
|
|
/**
|
|
* assign a default status code based on core http module.
|
|
* users can override this if they want to. HttpError constructor
|
|
* will handle overriding at the instance level.
|
|
* @type {Number}
|
|
*/
|
|
acc[name].prototype.statusCode = statusCode;
|
|
|
|
/**
|
|
* the default rest code. i.e., a BadDigestError has a restCode of
|
|
* 'BadDigest'. it is basically the key for the lookup in the CODES
|
|
* mapping at the top of the file.
|
|
* @type {String}
|
|
*/
|
|
acc[name].prototype.restCode = errorCode;
|
|
|
|
|
|
return acc;
|
|
}, {});
|
|
|
|
|
|
module.exports = restErrors;
|