首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.js Express应用程序-请求对象

Node.js Express应用程序-请求对象
EN

Stack Overflow用户
提问于 2014-11-19 12:51:09
回答 2查看 1K关注 0票数 0

为什么请求对象通常表示为"req",在整个应用程序生命周期中保持不变?您可以在带有function( req,res,next)等签名回调中看到此变量。如果我将一个变量附加到该请求对象(如req.user ),则该user对象似乎存在于整个应用程序中,这是真的吗?如果是,原因是什么?

是不是只有app.use是这样的呢?

代码语言:javascript
复制
app.use(function (request, response, next) {
    request.user= user;
    next();
});
EN

回答 2

Stack Overflow用户

发布于 2014-11-19 13:05:42

它在“整个应用程序生命周期”中是不一样的,在整个中间件堆栈中都是一样的。Express是基于Connect的,connect带来了“中间件堆栈”的概念--您注册的函数对请求/响应执行某些操作,并且能够将工作传递(或不传递)到中间件中的下一层。“栈”中的所有函数都对相同的请求/响应进行操作,但每个新请求都会产生新的请求/响应对象实例。

基本上,答案是“这是因为Connect就是这样设计的”

票数 3
EN

Stack Overflow用户

发布于 2014-11-19 13:10:42

请求对象在整个请求生命周期中都是相同的,而不是应用程序生命周期。

例如,你有一个这样的路由,有两个中间件(可以是任何数量)

代码语言:javascript
复制
app.get("/profile", authenticate, UserController.profile);

现在,只要路径上有请求,/profile express就会依次调用两个函数authenticateUserController.profile

并将向每个函数reqresnext传递三个参数。

但是express如何知道第一个函数是否已经完成执行呢?它知道如何使用next回调。因此,当authenticate调用next() express时,它知道函数执行已完成,并将使用相同的参数调用UserController.profile

因为req是一个对象,并且每个回调都被传递给相同的req对象,所以您在该对象中所做的任何更改都将可用于该特定请求的每个中间件/回调快速调用。

只有这样的app.use才是这样的吗?

不,对于路由方法也是如此。路由方法仅在路由匹配时调用,而app.use中间件则为每个请求调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27009195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档