node.js - 在Promise中进行错误处理

标签 node.js express error-handling promise

我的 express 和寄送错误有问题。

我试图以最好的方式来处理错误,并在我的应用程序中创建一种标准的方式来执行此操作。

但是,我面临一个问题:

validate(req.body)
.catch(e => next(new APIError(400, e)))
.then(validatedbody => searchdatabase(validatedbody))
.then(dbResult => validate(dbResult))
.catch(e => next(new APIError(500, e)))
// results from db should always be valid
.then(validatedDbResult => res.json(validatedDbResult))

如果主体是错误的,我们应该停止并发送错误,并且错误将使用错误处理中间件发送,但是由于Promise的工作方式不佳,它将继续进行下一步(在数据库中搜索)。

我该怎么办 ?
我是否首先正确地处理了错误?

非常感谢你,
吉尔索

最佳答案

只需重新抛出错误,并仅在链的最末端进行处理即可:

validate(req.body)
.catch(e => { throw new APIError(400, e); })
.then(validatedbody =>
  searchdatabase(validatedbody)
  .then(validate)
  .catch(e => { throw new APIError(500, e); })
)
.then(validatedDbResult => res.json(validatedDbResult),
      next)

关于node.js - 在Promise中进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44186553/

相关文章:

node.js - 使用脚本部署 Meteor 应用程序

javascript - 在导出进行单元测试之前等待申请?

ruby-on-rails - 处理事件资源错误

c++ - 如何使用返回值整理 C++ 错误处理? (解除分配)

php - 输出缓冲不显示错误通知

javascript - Node.JS 无效 URI 错误 : GET Request using Query parameter

html - socket.io 客户端到客户端消息传递

javascript - 如何知道传入请求是否在express.js 中请求 HTML(而不是 CSS、JS 等)

node.js - 跟踪链接的点击位置node.js

javascript - Nodejs Passport - 使用多个谷歌策略