javascript - ExpressJS : Promises and Error Handling middleware

标签 javascript node.js express promise sequelize.js

我定义了一些错误处理中间件和一个返回 promise 的路由。但是当那个 promise 出错时,我必须在每个 promise 之后手动附加 .catch(err => next(err)) 。虽然这不是问题,但 ExpressJs 是否明智地查看路由是否返回 promise ,如果是,则自动调用错误处理中间件。

我当前的缩短代码:

// errorHandlers.js
function sequelizeValidationError (err, req, res, next) {
  if (err.name && err.name == 'SequelizeValidationError')
    res.status(400).send(err.errors)
  else next(err)
}

// auth.js
router.post ('/register',  middleware.isNotAuthenticated, (req, res, next) => {
  const { email, password, name } = req.body;

  return models.User.find({where : { email }}).then(user => {
    if (user) {
      if (user.password == password) sendToken(user.id, res);
      else res.sendStatus(401);
    } else {
      return models.User.create({
        email, password, name
      }).then(user => {
        sendToken(user.id, res);
      })
    }
  }).catch(next)
})

// index.js
router.use('/auth', require('./auth'))

router.use(errorHandlers.sequelizeValidationError)

例如,目前我可能忘记在一个地方编写 catch 并且服务器会失败。

我是不是错过了什么?如何避免每次都输入 catch

最佳答案

这是 already filed .

我已经提交了 duplicate bug

到目前为止,最好的选择似乎是使用 wrap function .

另请参阅上面@robertklep 的评论。 promise-express-router如果您不使用 route-params 可能会有用。 express-co似乎是一个包装函数 + 更多基于生成器的优点

关于javascript - ExpressJS : Promises and Error Handling middleware,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38080111/

相关文章:

javascript - 无法从使用 Express.js 和 SQL Server 创建的 api 获得任何响应

javascript - 使用 webpack 从 angularjs 模块加载特定指令

javascript - moment.utc 在 IE 和 Safari 中不起作用

javascript - 在没有超时的情况下遍历 JavaScript 中的大型数组时出错

javascript - Node.js、多线程和 Socket.io

javascript - 在带有 jade 模板的 Express.js 中使用公开的对象作为值或助手?

node.js - 在 Redis 中存储和检索坐标数据

javascript - 授权 header 在 AJAX CORS 请求中仅附加一次

javascript - Gatsby "Creating Pages from Data Programatically"不起作用

xml - 将包含中文字符的 XML 发布到 Microsoft Translator API 会引发反序列化异常