Nodejs如何阻止从.all端点请求的实际端点?

时间:2017-03-13 06:37:40

标签: javascript node.js

我有一个.all端点,可以连接到accounts的所有端点。我想要做的是检查一个令牌然后如果它是真的,进入实际请求的端点。

我认为next()应该这样做,但是无论令牌是否有效,都会调用其他请求。

我做错了什么?

router.all(['/accounts', '/accounts/*'], (req, res, next) => {

  admin.auth().verifyIdToken(req.headers.authorization)
  .then((token) => {

    // TODO: Fix so that this actually works, now the other routes are being called regardless
    next();
  }).catch((error) => {

    res.send({
      error: error,
      data: {
        account: null,
        message: 'Invalid token',
        status: 401
      }
    });
  });
});

router.post('/accounts', (req.res, next) => {});
router.post('/accounts/:uid', (req.res, next) => {});

如果verifyToken函数成功,我怎样才能确保.all端点只能继续使用/ accounts或/ accounts /:uid?显然,next()在阻止连续请求方面没有做任何事情。

1 个答案:

答案 0 :(得分:0)

如果你在捕获中没有return那么它将继续到下一个路线,如果你返回它会打破链:

router.all(['/accounts', '/accounts/*'], (req, res, next) => {

  admin.auth().verifyIdToken(req.headers.authorization)
  .then((token) => {
    next();
  }).catch((error) => {

    return res.send({
      error: error,
      data: {
        account: null,
        message: 'Invalid token',
        status: 401
      }
    });
  });
});