node.js - 如何使用 async/await 进行正确的错误处理

标签 node.js express asynchronous error-handling promise

我正在编写一个 API,但我在处理错误时遇到了一些麻烦。我不确定的是第一个代码片段是否足够,或者我是否应该将它与第二个代码片段中的 promise 混合使用。任何帮助将非常感激!

try {
  var decoded = jwt.verify(req.params.token, config.keys.secret);
  var user = await models.user.findById(decoded.userId);
  user.active = true;
  await user.save();
  res.status(201).json({user, 'stuff': decoded.jti});
} catch (error) {
  next(error);
}

第二个代码片段:
try {
      var decoded = jwt.verify(req.params.token, config.keys.secret);
      var user = models.user.findById(decoded.userId).then(() => {

      }).catch((error) => {

      });
      user.active = true;
      await user.save().then(() => {

      }).catch((error) => {

      })
      res.status(201).json({user, 'stuff': decoded.jti});
    } catch (error) {
      next(error);
    }

最佳答案

答案是:视情况而定。

捕捉每一个错误

如果您想对每个错误做出不同的 react ,这是有道理的。
例如。:

 try {
        let decoded;
        try {
          decoded = jwt.verify(req.params.token, config.keys.secret);
        } catch (error) {
          return response
            .status(401)
            .json({ error: 'Unauthorized..' });
        }
...

但是,代码可能会变得非常困惑,您可能希望对错误处理进行一些不同的拆分(例如:在某些预请求 Hook 上进行 JWT 验证并只允许对处理程序的有效请求和/或执行 findByIdsave 参与服务,每次操作抛出一次)。

如果没有找到具有给定 ID 的实体,您可能希望抛出 404。

一次捕获

如果您想在 a) 或 b) 或 c) 出错时以相同的方式使用react,那么第一个示例看起来就好了。
  a) var decoded = jwt.verify(req.params.token, config.keys.secret);
  b) var user = await models.user.findById(decoded.userId);
  user.active = true;
  c) await user.save();
  res.status(201).json({user, 'stuff': decoded.jti});

关于node.js - 如何使用 async/await 进行正确的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52244817/

相关文章:

Node.JS 提高 cassandra 性能

node.js - Sinon 函数 stub : How to call "own" function inside module

javascript - JavaScript 中的递归异步函数

c# - 我如何在 C# 中使用线程一次从网络加载多个图像?

javascript - AJAX:如何实时读取变化的(cronjob-)文件?

javascript - 使分页与其计数一起工作

node.js - 将未知数量的参数传递给 NodeJS 路由

javascript - API 输入验证和避免 Big If 语句

javascript - 如何在 node.js 中重定向然后停止

javascript - 从 html 响应 Nodejs 中提取文本值