快递4的异步换行功能不会捕获错误

时间:2016-09-28 15:46:10

标签: javascript node.js express asynchronous babeljs

我正在尝试从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
  });
});

1 个答案:

答案 0 :(得分:2)

您需要在错误处理程序中有4个参数才能将其识别为一个:

(来自http://expressjs.com/en/guide/error-handling.html):“以与其他中间件函数相同的方式定义错误处理中间件函数,除了错误处理函数有四个参数而不是三个:(err, req, res, next)。< / EM>“

  

这是我不想调用的最后一个错误处理程序()

这并不重要,即使你不使用它,你仍然必须声明它。