javascript - express 4 的异步包装函数不会捕获错误

标签 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
  });
});

最佳答案

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

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

this is the last error handler I don't wanna call next()

没关系,不用也得申报

关于javascript - express 4 的异步包装函数不会捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39752154/

相关文章:

javascript - Node.js域中的多个错误事件调用

node.js - Sequelize中如何使用CASE WHEN表达式?

node.js - Express + Passport + Session。为每个页面加载执行查询

node.js - 如何在 sequelize 中添加复合外键?

javascript - 对象不支持属性或方法 'test'

javascript - 有没有一种简单的方法可以将带有多个 <br/> 标记的 HTML 转换为 Javascript 中适当的周围 <p> 标记?

node.js - 从 mongodb 查找聚合中获取 true 或 false(只有值而不是数组或对象)

node.js - http请求后浏览器显示err_empty_response

javascript - 将表单输入的 2 个矩阵相乘。 (Javascript)

javascript - Y 轴值与 Highcharts 中的蜡烛合并