app.get 有多个参数 - 例如app.get('/', requireAuth, (req, res) => { })

app.get with multiple arguments - e.g. app.get('/', requireAuth, (req, res) => { })

我想知道当您在 app.get 中指定多个参数时 express.js 是如何工作的,例如:

app.get('/', requireAuth, (req, res) => { })

在这里,我相信您将斜杠“/”作为路由,并将 (req, res) 作为回调函数的参数。但也有用于授权的 'requireAuth' 部分。但是在文档中,我没有找到关于我们现在使用 'requireAuth' 的方式的多个参数的任何内容。它确实提到您可以使用函数数组,但此处未使用 (https://expressjs.com/en/guide/routing.html)。它是如何工作的?

P.S。 'requireAuth'代码供参考:

module.exports = (req, res, next) => {
  const { authorization } = req.headers;
  // authorization === 'Bearer laksjdflaksdjasdfklj'

  if (!authorization) {
    return res.status(401).send({ error: 'You must be logged in.' });
  }

  const token = authorization.replace('Bearer ', '');
  jwt.verify(token, 'MY_SECRET_KEY', async (err, payload) => {
    if (err) {
      return res.status(401).send({ error: 'You must be logged in.' });
    }

    const { userId } = payload;

    const user = await User.findById(userId);
    req.user = user;
    next();
  });
};

所有参数都是您在实际路由逻辑 运行(对于单个路由)之前调用的简单中间件函数。只要每个中间件函数中有 next 处理,链就会 运行 直到你的路由逻辑,然后在没有处理 next 的地方退出。

这就是快递的魔力。您可以用它做很多事情,例如错误处理、处理不同的内容类型等。