异步/等待中断执行并从快速路由返回403

时间:2019-01-24 17:11:30

标签: javascript node.js express async-await

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

例如,在异步/等待版本中,如果从checkUserRouteRequirements引发错误,并且{API发出了403,则Express继续执行代码并尝试res.json(result);。 / p>

我宁愿将.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({});
  });
}

我也不喜欢在任何地方都尝试/捕获并抛出必须捕获的错误。

任何建议表示赞赏!

0 个答案:

没有答案