2015-10-27 128 views
0

当我创建一个带有节点的http服务器时,我想知道请求对象可以以某种方式指向响应对象。现在,我正在创建一个等于响应并访问该响应的全局变量,但我希望直接从请求中访问响应。node.js请求点响应

var http = require('http'); 

var server = http.createServer(server_handler).listen(port); 

var response_stream_object = {}; 

function server_handler(request, response) { 
    response_stream_object = response; 
    request.func(param); 
} 

http["IncomingMessage"].prototype.func = function(param) { 
    // Doing something with response_stream_object 
} 
+1

不要将请求/响应对象保存在全局变量或甚至模块变量中。如果您有多个请求正在同时处理,那么如果将它们保存到同一个更高范围的变量中,它们会互相打开。响应变量只能在该特定请求的持续时间内运行,因此当您从请求处理程序中调用另一个函数时,您可以将它们传递给其他任何需要它们的地方。 – jfriend00

回答

1

不要使用全局变量。它被所有请求共享给你的服务器。因此,如果在完成当前请求处理之前发生另一个请求,它可能会被覆盖。如果您没有异步处理(没有数据库,没有磁盘访问,没有网络访问),这只会是正常的。

既然这是javascript,当然你可以随时添加东西到任何对象(任何对象)。例如,你甚至可以添加的东西内置Math对象:

// only an example, don't do this: 
Math.monkey = "ooh, ooh, aah, aah"; 

因此,你可以简单地做:

request.response = response; 

现在相关的响应对象是直接关系到请求对象。


但是,如果您需要这样做,请考虑长期和艰苦的关于您的架构。如果你真的需要这样做,那么你可能做错了什么。