繁体   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