#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 не обрабатывается.
В этом и заключается магия экспресса. Вы можете делать с ним много вещей, таких как обработка ошибок, обработка различных типов контента и т.д.