排除节点中的第一行错误堆栈? /自定义错误types在节点?
有没有办法使用JavaScript工厂创build一个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,并且控制台窗口只显示堆栈的第一行。 您必须滚动才能到达额外的行。
能够通过覆盖自定义错误中的上下文来使其在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));