Node.js中的HTTP请求不工作?

我试图做一个HTTP请求function。 所有请求都转到同一个域的同一个目录,只有文件名不同。

控制台中没有任何东西出现,它不会返回任何东西。

function HttpRequest(filename){ var options = { host: "example.com", port: 80, path: "/path/to/file/" + filename, method: "GET", }; var Response = ""; var StatusCode = 0; var req = http.request(options, function(resp){ resp.on('data', function(data){ Response = data; StatusCode = resp.statusCode; }); }); req.on('error',function(e){ console.log("Request to '" + filename + "' failed: " + e.message) }); req.write('data\n'); req.write('data\n'); req.end(); return Response; } 

你遇到这个问题,因为http.request函数本质上是asynchronous的 – 你不知道什么时候会返回,如果有的话。

这段代码会将正确的值赋给正确的variables(尽pipe这里可能遇到一个范围问题):

 var req = http.request(options, function(resp){ resp.on('data', function(data){ Response = data; StatusCode = resp.statusCode; }); }); 

但你永远不知道什么时候Response设置为data 。 当您编写return Response ,只要函数执行完成,您就基本上返回Response的值 – 但这并不意味着HTTP请求已完成或者callback已执行。

正如@Jonathan Lonowski在评论中提到的,这个答案就是你应该如何尝试你的问题。

实质上,您需要使用您提供的callback函数作为参数。

 function HttpRequest(filename, callback){ var options = { host: "example.com", port: 80, path: "/path/to/file/" + filename, method: "GET", }; var req = http.request(options, function(resp){ resp.on('data', callback); }); req.on('error',function(e){ console.log("Request to '" + filename + "' failed: " + e.message) }); req.write('data\n'); req.write('data\n'); req.end(); } 

然后,在调用你的函数时:

 HttpRequest("myfile", function(data) { console.log(data); });