簡體   English   中英

Node.js Express應用-請求對象

[英]Node.js Express app - request object

為什么通常用“ req”表示的請求對象在整個應用程序生命周期中保持不變? 您可以在帶有諸如function(req,res,next)之類的簽名的回調中看到此變量,如果我將變量附加到該req對象(如req.user),則該用戶對象似乎在整個應用程序中都存在,是否為真,如果是,為什么?

這樣僅適用於app.use嗎?

app.use(function (request, response, next) {
    request.user= user;
    next();
});

在整個應用程序生命周期中,它是不同的,在整個中間件堆棧中,它是相同的。 Express是基於Connect的,而connect帶來了“中間件堆棧”的概念-您注冊具有請求/響應功能並能夠傳遞(或不傳遞)中間件中下一層功能的函數。 “堆棧”中的所有功能都對相同的請求/響應進行操作,但是每個新請求都會導致請求/響應對象的新實例。

基本上,答案是“這是因為Connect設計為以這種方式工作”

在整個請求生命周期中,請求對象將是相同的,而不是應用程序生命周期。
例如,您有一條帶有兩個中間件的路由(可以是任意數量)

app.get("/profile", authenticate, UserController.profile);

現在,只要在路徑/profile上有請求,express就會依次調用兩個函數authenticateUserController.profile
並將三個參數傳遞給每個函數reqresnext
但是如何表達知道第一個功能是否已完成執行? 它知道使用next回調。 因此,當authenticate將調用next() express知道函數執行已完成,並將使用相同的參數調用UserController.profile

由於req是一個對象,並且每個回調都傳遞相同的req對象,因此您對該對象所做的任何更改將可用於該特定請求的每個中間件/回調快速調用。

這樣僅適用於app.use嗎?

不,對於route方法也是如此。 僅當路由匹配時才調用路由方法,而為每個請求調用app.use中間件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM