javascript - 异步/等待中断执行并从快速路由返回 403
问题描述
假设 node.js LTS 并使用异步等待,那么中断执行的正确方法是什么?我将显示一个 promisified 版本和一个 async / await 版本来演示这个问题 -
checkUserRouteRequirements
在 async / await 版本中,如果从例如抛出错误并403
从 API express 发回,则继续执行代码并尝试执行res.json(result);
。
我宁愿.catch
在validateRoute
方法中使用可重用性,因为可能有数百条路由,当然不会出现尝试发送标头两次的错误。
异步/等待
router.get('/', async (req, res, next) => {
await validateRoute(roles.Approved, req, res, next);
// await does not break code execution
const result = await channelsService.getAll();
return res.json(result);
});
async function validateRoute(role, req, res, next) {
return checkUserRouteRequirements(req.user.sub, role).catch(error => {
res.status(403).json({});
});
}
承诺的
router.get('/', (req, res, next) => {
validateRoute(roles.Approved, req, res, next).then(() => {
channelsService.getAll().then(result => { return res.json(result) });
});
});
function validateRoute(role, req, res, next) {
return checkUserRouteRequirements(req.user.sub, role).catch(error => {
res.status(403).json({});
});
}
我也不喜欢在任何地方都放置 try / catches 并抛出必须捕获的错误。
任何建议表示赞赏!
解决方案
推荐阅读
- matlab - MATLAB 中是否有键盘快捷键可以激活当前文件夹栏?
- javascript - 无状态组件内部的函数
- python - pip install 在 Linux 中不起作用。找不到满足要求的版本
- vba - 复制和粘贴无意中触发 Worksheet_Change sub
- select - BeautifulSoup - 选择输出
- wordpress - 如何管理父子主题?
- docker - 如何让 Jupyter Docker 容器使用更多内存
- javascript - 单击Jquery从数组中获取元素的索引
- python-3.x - 如何结束包含 time.sleep 的 while 循环?
- java - 由于无效的 rsa 公钥,无法从 nexus 下载工件