2016-09-28 3 views
1

私は、非同期ルートのラップ関数を持つためにstrongloop https://strongloop.com/strongblog/async-error-handling-expressjs-es7-promises-generators/からこのトリックを試していますが、エラー関数は呼び出されません。私はまた、エラー関数をauthRouterファイルの中に入れようとしました。 authRouter.jsでexpress 4の非同期ラップ関数はエラーをキャッチしません

let wrap = fn => (...args) => fn(...args).catch(args[2]); 

router.post('/login', wrap(async (req,res) => { 
    if (!req.body.email || !req.body.password) throw new Errors.BadRequestError(); 
})); 

export default router; 

とapp.js

app.use('/auth', authRouter); 

app.use(function(err, req, res) { 
    console.log('in here'); 
    const status = err.status || 500; 
    if (status === 500) console.log(err); 

    res.status(status); 
    res.send({ 
    message: err.message, 
    error: err 
    }); 
}); 
+0

エラーハンドラは4つのパラメータを持つ必要があると思いますが、それは可能でしょうか? – Bergi

+0

これは最後のエラーハンドラではありません。next()を呼びたくありません。 – arisalexis

答えて

2

にあなたは特急が1としてそれを認識させるために、エラーハンドラで4つのパラメータを持っている必要があります。

http://expressjs.com/en/guide/error-handling.html): "他のミドルウェア関数と同じ方法でエラー処理ミドルウェア関数を定義します。ただし、エラー処理関数には4つの引数i 3つの数字のいずれか。(err, req, res, next)

これは、私は本当にあなたがそれを使用しない場合、あなたはまだもそれを宣言する必要があり、重要ではありませんたくコール次の()

をしません最後のエラーハンドラです。

関連する問題