如何从Express的应用程序对象中获取请求对象?

4
在Express中,您调用var app = module.exports = express.createServer();来创建一个新的HTTPServer对象。我想从这个app(HTTPServer)对象中访问当前的req对象。有办法做到这一点吗?

是的,有的。在路由回调函数中,req 是可用的。您是如何尝试做到这一点的? - Matt Ball
@MattBall 嗯,我已经将一个对象绑定到请求对象的会话对象中(当前用户的ID),我想在我的应用程序的WebSockets部分访问它,但是在那里我似乎只有app对象。因此,我想从这个HTTPServer对象中访问请求对象。 - user730569
@MattBall 对的,但由于我需要在应用程序的Websockets部分中使用它,所以我不会调用任何路由。(我为所有路径启动socket.io Websockets服务器) - user730569
除了路由之外,没有“请求”的东西--请求的定义是“触发此路由的事物”,每个进入的...呃,请求都有一个。 - Michelle Tilley
@BrandonTilley 那么使用socket.io的websockets请求呢?它没有指定的路由,但仍然包含对您的应用程序的请求。 - user730569
是的,但Express不能处理它,Socket.IO模块(在某个地方插入到Express中)可以处理它。您可以获取与websocket请求一起发送的cookie等内容,但这不是传统的请求(即使是这样,request也仅指初始连接,因此从应用程序对象中获取它仍然没有意义)。 - Michelle Tilley
1个回答

6
req 对象只在底层的 HTTPServer 实际接收到请求时创建,并且仅在处理请求期间存在。因此,在回调函数之外谈论它没有实际意义。
在回调函数中,您可以从会话对象中简单地复制适当的数据到其他地方,并在 WebSockets 代码中使用该副本。但是,在完成请求处理后,不能保证请求对象或甚至会话对象仍然存在。
展示一个小的代码示例将很有帮助;听起来您遇到了“XY 问题”(您想要实现目标 X,并且已经决定使用技术 Y 是正确的方式,而事实上技术 Z 可能更好)。

因为“XY问题”类比而点赞。我之前不知道这个词汇 :) - scaryguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接