Ну, мой вопрос: я хочу передать некоторую переменную из первого промежуточного программного обеспечения в другое промежуточное программное обеспечение, и я попытался сделать это, но было « req.somevariable
задано как« неопределенное »».
//app.js
..
app.get('/someurl/', middleware1, middleware2)
...
////middleware1
...
some conditions
...
res.somevariable = variable1;
next();
...
////middleware2
...
some conditions
...
variable = req.somevariable;
...
javascript
node.js
express
middleware
next
user2791897
источник
источник
res
в middleware1 и пытаетесь получить его изreq
middleware2.Local variables are available in middleware via req.app.locals
expressjs.com/pt-br/api.html#app.localsОтветы:
Прикрепите вашу переменную к
req
объекту, а неres
.Вместо того
Есть:
Как уже отмечали другие,
res.locals
это рекомендуемый способ передачи данных через промежуточное ПО.источник
res.locals
, нетreq.res.locals
.res.locals.myVar
это путьЭто то, для чего предназначен объект res.locals . Установка переменных непосредственно в объекте запроса не поддерживается и не документируется. res.locals гарантированно сохраняет состояние в течение срока действия запроса.
res.locals
Чтобы получить переменную в следующем промежуточном программном обеспечении:
источник
req
объекте expressjs.com/en/guide/writing-middleware.html . Посмотрите на разделMiddleware function requestTime
res.json({})
и т. Д.res.locals
, Которое доступно только на бэкэнде в течение срока действия запроса. expressjs.com/en/5x/api.htmlЯ не думаю, что лучшая практика будет передавать переменную, как
req.YOUR_VAR
. Вы можете рассмотретьreq.YOUR_APP_NAME.YOUR_VAR
илиreq.mw_params.YOUR_VAR
.Это поможет вам избежать перезаписи других атрибутов.
Обновление 31 мая 2020 г.
Res.locals - это то, что вы ищете, объект находится в области запроса.
Объект, который содержит локальные переменные ответа, ограниченные областью запроса и, следовательно, доступные только для представлений, представленных в течение этого цикла запрос / ответ (если есть). В противном случае это свойство идентично app.locals.
Это свойство полезно для предоставления информации уровня запроса, такой как имя пути запроса, аутентифицированный пользователь, настройки пользователя и так далее.
источник
req.YOUR_APP_NAME = {}
изначально? Просто попробуйте написать,req.YOUR_APP_NAME.someVar
вы получите сообщение об ошибке, посколькуreq.YOUR_APP_NAME
оно еще не определено.router.use(function(req,res,next){req.YOUR_APP_NAME = {};next()})
req.APP_NS = req.APP_NS || {}; req.APP_NS.somevar = 'value'
.next
функцию, он вызовет экспресс-обработчик ошибок и выпадет. проверьте документы.Это потому
req
иres
два разных объекта.Вам нужно искать свойство в том же объекте, к которому вы его добавили.
источник
Уловка довольно проста ... Цикл запросов все еще в значительной степени жив. Вы можете просто добавить новую переменную, которая создаст временную, вызывая
Так как вы можете обработать ваш запрос в первом промежуточном программном обеспечении
В промежуточном программном обеспечении 1 вы обрабатываете свою логику и сохраняете свои значения, как показано ниже:
В промежуточном программном обеспечении 2 вы можете поймать это значение из промежуточного программного обеспечения 1, выполнив следующие действия:
источник
Как упомянуто выше, res.locals - хороший (рекомендуемый) способ сделать это. Смотрите здесь краткое руководство о том, как это сделать в Express.
источник