首页 > 解决方案 > 异步/等待中断执行并从快速路由返回 403

问题描述

假设 node.js LTS 并使用异步等待,那么中断执行的正确方法是什么?我将显示一个 promisified 版本和一个 async / await 版本来演示这个问题 -

checkUserRouteRequirements在 async / await 版本中,如果从例如抛出错误并403从 API express 发回,则继续执行代码并尝试执行res.json(result);

我宁愿.catchvalidateRoute方法中使用可重用性,因为可能有数百条路由,当然不会出现尝试发送标头两次的错误。

异步/等待

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 并抛出必须捕获的错误。

任何建议表示赞赏!

标签: javascriptnode.jsexpressasync-await

解决方案


推荐阅读