2016-05-12 6 views
1

ErrorオブジェクトをJavaScriptファクトリを使用して作成する方法はありますか?例えばノードのエラースタックの1行目を除外しますか? /ノードのカスタムエラータイプ?

、これ:

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) 

スタックの最初の行は、実際には、工場内からのラインです。実際の問題はスタックの2行目から始まります。

私はWebStormを使用しています。コンソールウィンドウには、スタックの最初の行だけが表示されます。追加の行にスクロールする必要があります。

+0

スローされる前にエラーをキャプチャし、エラーメッセージ文字列の問題の部分を削除するだけですか?これは価値があるよりもトラブルが多いように思えます - あなたはIDEでうまく見えるようにプロダクションコードを変更したくないのです。 –

+0

私はそれを変更したいとは言いませんでした。ファクトリーの代わりに実際のエラーがどこに存在するかを示すテクニックを探しているだけです。 –

+0

ここに工場の価値はありますか? '新しいエラーを投げる( 'derp')'は十分に速いようです。 –

答えて

1

は、カスタムエラーにコンテキストをオーバーライドすることにより、ノードで動作するように取得することができました:

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)); 
関連する問題