排除Node中的第一行错误堆栈? /自定义错误类型在节点?

时间:2016-05-12 17:35:20

标签: javascript node.js

有没有办法使用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,控制台窗口只显示堆栈的第一行。您必须滚动才能转到其他行。

1 个答案:

答案 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));