javascript - 我应该在 try-catch 块中编写所有路由处理代码吗?
问题描述
这是对 try...catch 的良好使用,还是应该将所有内容都写在 try 块中?我试图阻止嵌套的 try...catch 块。
router.post('/refresh', async (req, res) => {
const refreshToken = req.body.token;
let decoded;
try {
decoded = jwt.verify(
refreshToken,
process.env.REFRESH_TOKEN_SECRET,
);
} catch(error) {
return res.sendStatus(401);
}
// … use decoded variable here
});
解决方案
你永远不需要嵌套try/catches
- acatch()
将捕获它下面的所有错误。
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch
具体来说:
try...catch 语句标记要尝试的语句块,并指定抛出异常时的响应。
但是,如果您不确定它refreshToken
是否存在(这是不信任 Web 浏览器的一个很好的例子),您可以将它添加到您正在捕获错误的块中:
router.post('/refresh', async (req, res) => {
let decoded;
try {
const refreshToken = req?.body?.token;
if ( ! token ) {
throw new Error('Token not supplied!')
}
decoded = jwt.verify(
refreshToken,
process.env.REFRESH_TOKEN_SECRET,
);
} catch(error) {
return res.sendStatus(401);
}
// … use decoded variable here
});
推荐阅读
- javascript - 如果找到 Razor 处理程序,则调用 JS 函数
- python - 使用 Python 'for loop' 的结果创建 pandas 数据框
- android - (Ed)Xposed 资源覆盖失败
- javascript - Marionette 如何按顺序渲染区域
- android - 前台 android 服务有时不工作
- r - 如何根据来自单独数据集的值在数据集中包含新列?
- python - 我如何遍历文件中的每一行并将变量分配给这些行
- java - Java中的以下regex是什么意思
- python - 如何格式化嵌套字典列表以以人类可读的形式写入文件
- python - 嵌套for循环以在Python中制作三角形图案