Все Express обработчики маршрута (app.use()
, app.get()
, app.post()
или что-либо еще) проверяются на соответствие маршрута в порядке их регистрации. Кроме того, если маршрут отправляет запрос и не вызывает next()
, дальнейшие маршруты не проверяются на соответствие текущему запросу. Вся обработка этого запроса будет выполнена.
Таким образом, вы ДОЛЖНЫ поместить любое промежуточное программное обеспечение ДО любых запросов, которые хотят использовать результаты этого промежуточного программного обеспечения.
Некоторые люди считают, что все app.use()
обработчики могут быть проверены на совпадение и потенциально выполнены (если они соответствуют запросу) перед любыми обработчиками app.get()
или app.post()
. Это не относится к делу. Существует один порядок обработчиков в том порядке, в котором они зарегистрированы, независимо от типа обработчика.
Это не сработало, если бы я не поставил промежуточное ПО app.use(session())
первым.
Если промежуточное программное обеспечение сеанса находится не перед обработчиком запросов, который хочет использовать сеанс, то переменные сеанса еще не будут инициализированы, когда этот обработчик запросов будет запущен, и req.session
сам будет undefined
.
Вы должны поместить промежуточное программное обеспечение сеанса перед любым обработчиком запросов, который хочет использовать переменные сеанса.