我正在尝试从strongloop https://strongloop.com/strongblog/async-error-handling-expressjs-es7-promises-generators/获取这个技巧,以获得异步路由的包装功能 但永远不会调用错误函数。我还尝试将错误函数放在authRouter文件中。
在authRouter.js中:
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 :(得分:2)
您需要在错误处理程序中有4个参数才能将其识别为一个:
(来自http://expressjs.com/en/guide/error-handling.html):“以与其他中间件函数相同的方式定义错误处理中间件函数,除了错误处理函数有四个参数而不是三个:(err, req, res, next)
。< / EM>“
这是我不想调用的最后一个错误处理程序()
这并不重要,即使你不使用它,你仍然必须声明它。