gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:46:36 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com