app.get с несколькими аргументами — например, app.get(‘/’, requireAuth, (req, res) => { })

#react-native #express #routes #middleware

#react-native #выразить #маршруты #промежуточное программное обеспечение

Вопрос:

Мне интересно, как express.js работает, когда вы указываете несколько аргументов в app.get, например:

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

Здесь, я полагаю, у вас есть косая черта «/» в качестве маршрута и (req, res) в качестве аргументов для функции обратного вызова. Но есть также часть ‘requireAuth’, которая использовалась для авторизации. Но в документации я ничего не нахожу о нескольких аргументах в том, как мы сейчас используем ‘requireAuth’. В нем упоминается, что вы можете использовать массив функций, но это здесь не используется (https://expressjs.com/en/guide/routing.html ). Как это работает?

PS Код ‘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();
  });
};
 

Ответ №1:

Все аргументы — это просто промежуточные функции, которые вы вызываете перед запуском фактической логики маршрута (для отдельных маршрутов). До тех пор, пока в каждой из промежуточных функций выполняется обработка next, цепочка будет выполняться до логики вашего маршрута, а затем завершится там, где next не обрабатывается.

В этом и заключается магия экспресса. Вы можете делать с ним много вещей, таких как обработка ошибок, обработка различных типов контента и т.д.