有没有办法使用JavaScript工厂创建Error
对象,而不包括堆栈中工厂的行?
例如,这个:
if (!member) {
return next(errs.init('Invalid email address.', errs.UNAUTHORIZED));
}
...产生这个:
Error: Invalid email address.
at Object.init (/.../bin/utils/errors.util.js:21:16)
at Query.<anonymous> (/.../routes/auth/auth.routes.js:37:30)
at /.../node_modules/kareem/index.js:177:19
at /.../node_modules/kareem/index.js:109:16
at nextTickCallbackWith0Args (node.js:419:9)
堆栈的第一行实际上是工厂内的一行。实际问题从堆栈的第二行开始。
我正在使用WebStorm,控制台窗口只显示堆栈的第一行。您必须滚动才能转到其他行。
答案 0 :(得分:1)
通过覆盖自定义错误中的上下文,能够让它在Node中工作:
function ApiError (message, status, context) {
this.name = 'ApiError';
this.message = message || '';
this.status = status || 500;
Error.captureStackTrace(this, ( context || ApiError ));
}
require('util').inherits(ApiError, Error);
function init (message, status) {
return (new ApiError(message, status, init));
}
module.exports = {
init : init,
ApiError : ApiError,
BAD_REQUEST : 400,
UNAUTHORIZED : 401,
FORBIDDEN : 403,
NOT_FOUND : 404,
CONFLICT : 409
};
这允许:
return next(errs.init('Invalid email address.', errs.UNAUTHORIZED));
......或......
return next(new errs.ApiError('Invalid email address.', errs.UNAUTHORIZED));