Заказ Express JS Middleware - PullRequest
       41

Заказ Express JS Middleware

0 голосов
/ 21 февраля 2020

Я возился с Express JS и использовал express -сессию. Это не сработало, если бы я не поставил app.use(session()) промежуточное ПО первым

app.use(session({
     name: 'server-session-cookie-id',
     secret: 'my express secret',
     saveUninitialized: true,
     resave: true
}));
app.use('/', routes);
app.set("view engine", "pug");
app.set("views", path.join(__dirname + "/views"));
app.use(flash());

Если app.use(session()), написанное первым, то это скажет, что req.session.someVariable не определено.

Может кто-нибудь объяснить, как Express вызывает промежуточное ПО app.use?

1 Ответ

1 голос
/ 21 февраля 2020

Все Express обработчики маршрута (app.use(), app.get(), app.post() или что-либо еще) проверяются на соответствие маршрута в порядке их регистрации. Кроме того, если маршрут отправляет запрос и не вызывает next(), дальнейшие маршруты не проверяются на соответствие текущему запросу. Вся обработка этого запроса будет выполнена.

Таким образом, вы ДОЛЖНЫ поместить любое промежуточное программное обеспечение ДО любых запросов, которые хотят использовать результаты этого промежуточного программного обеспечения.

Некоторые люди считают, что все app.use() обработчики могут быть проверены на совпадение и потенциально выполнены (если они соответствуют запросу) перед любыми обработчиками app.get() или app.post(). Это не относится к делу. Существует один порядок обработчиков в том порядке, в котором они зарегистрированы, независимо от типа обработчика.

Это не сработало, если бы я не поставил промежуточное ПО app.use(session()) первым.

Если промежуточное программное обеспечение сеанса находится не перед обработчиком запросов, который хочет использовать сеанс, то переменные сеанса еще не будут инициализированы, когда этот обработчик запросов будет запущен, и req.session сам будет undefined.

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

...