Nah, pertanyaan saya adalah saya ingin melewatkan beberapa variabel dari middleware pertama ke middleware lain, dan saya mencoba melakukan ini, tetapi ada " req.somevariable
diberikan sebagai 'tidak terdefinisi'".
//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
pengguna2791897
sumber
sumber
res
di middleware1 dan mencoba untuk mendapatkannya darireq
di middleware2.Local variables are available in middleware via req.app.locals
expressjs.com/pt-br/api.html#app.localsJawaban:
Lampirkan variabel Anda ke
req
objek, bukanres
.Dari pada
Memiliki:
Seperti yang telah ditunjukkan orang lain,
res.locals
adalah cara yang disarankan untuk mengirimkan data melalui middleware.sumber
res.locals
, bukanreq.res.locals
.res.locals.myVar
adalah cara untuk pergi.Inilah tujuan objek res.locals . Pengaturan variabel langsung pada objek permintaan tidak didukung atau didokumentasikan. res.locals dijamin memiliki status selama masa permintaan.
res.locals
Untuk mengambil variabel di middleware berikutnya:
sumber
req
objek expressjs.com/en/guide/writing-middleware.html . Lihatlah bagianMiddleware function requestTime
res.json({})
, dll.res.locals
Hanya tersedia di back-end selama umur permintaan. expressjs.com/en/5x/api.htmlSaya tidak berpikir bahwa praktik terbaik akan melewati variabel suka
req.YOUR_VAR
. Anda mungkin ingin mempertimbangkanreq.YOUR_APP_NAME.YOUR_VAR
ataureq.mw_params.YOUR_VAR
.Ini akan membantu Anda menghindari menimpa atribut lainnya.
Pembaruan 31 Mei 2020
res.locals adalah apa yang Anda cari, objek dicakup untuk permintaan tersebut.
Objek yang berisi variabel lokal respons yang mencakup permintaan, dan karena itu hanya tersedia untuk tampilan yang diberikan selama siklus permintaan / respons tersebut (jika ada). Jika tidak, properti ini identik dengan app.locals.
Properti ini berguna untuk mengekspos informasi tingkat permintaan seperti nama jalur permintaan, pengguna yang diautentikasi, pengaturan pengguna, dan sebagainya.
sumber
req.YOUR_APP_NAME = {}
awalnya? Anda hanya mencoba menulis kepadareq.YOUR_APP_NAME.someVar
Anda akan mendapatkan kesalahan karenareq.YOUR_APP_NAME
belum didefinisikan.router.use(function(req,res,next){req.YOUR_APP_NAME = {};next()})
req.APP_NS = req.APP_NS || {}; req.APP_NS.somevar = 'value'
.next
berfungsi, itu akan memicu penangan kesalahan express dan drop out. periksa dokumen.Itu karena
req
danres
dua benda yang berbeda.Anda perlu mencari properti pada objek yang sama dengan yang Anda tambahkan.
sumber
Caranya cukup sederhana ... Siklus permintaan masih cukup hidup. Anda bisa menambahkan variabel baru yang akan membuat panggilan sementara
Karena Anda dapat menangani permintaan Anda di middleware pertama
Di middleware 1 Anda menangani logika Anda dan menyimpan nilai Anda seperti di bawah ini:
Di middleware 2 Anda dapat menangkap nilai ini dari middleware 1 dengan melakukan hal berikut:
sumber
Seperti disebutkan di atas, res.locals adalah cara yang baik (disarankan) untuk melakukan ini. Lihat di sini untuk tutorial singkat tentang cara melakukannya di Express.
sumber