Node.js 如何将GET请求的响应存储在节点JS的局部变量中

Node.js 如何将GET请求的响应存储在节点JS的局部变量中,node.js,get,Node.js,Get,我知道使用request模块向URL发出GET请求的方法。最后,代码只是在命令shell中打印GET响应,它是从那里生成的 如何将这些GET响应存储在局部变量中,以便在程序中的其他位置使用它 这是我使用的代码: var request = require("request"); request("http://www.stackoverflow.com", function(error, response, body) { console.log(body); }); 最简单的方法(

我知道使用
request
模块向URL发出GET请求的方法。最后,代码只是在命令shell中打印GET响应,它是从那里生成的

如何将这些GET响应存储在局部变量中,以便在程序中的其他位置使用它

这是我使用的代码:

var request = require("request");
request("http://www.stackoverflow.com", function(error, response, body) {
    console.log(body);
}); 
最简单的方法(但它有陷阱——见下文)是将
body
移动到模块的范围内

var request = require("request");
var body;


request("http://www.stackoverflow.com", function(error, response, data) {
    body = data;
});
然而,这可能会导致错误。例如,您可能倾向于在调用
request()
之后放置
console.log(body)

这将不起作用,因为
request()
是异步的,所以它在回调中设置
body
之前返回控制

通过创建
body
作为事件发射器并订阅事件,您可能会得到更好的服务

var request = require("request");
var EventEmitter = require("events").EventEmitter;
var body = new EventEmitter();


request("http://www.stackoverflow.com", function(error, response, data) {
    body.data = data;
    body.emit('update');
});

body.on('update', function () {
    console.log(body.data); // HOORAY! THIS WORKS!
});

另一个选项是。

在移动之前尝试查看此问题:
body
已经是保存响应的函数中的局部变量。您可以将该值复制到请求之前声明的另一个变量。但是,由于它是异步执行的,因此您无法保证在尝试使用
函数(错误、响应、正文)
内部调用的内容之外的内容之前完成请求,根据您的第三个代码,变量数据将包含GET response right?body将包含第一个示例中的响应,body.data将包含最后一个示例中的响应。关于控制结构的解释,请注意。这是一个很好的答案。
var request = require("request");
var EventEmitter = require("events").EventEmitter;
var body = new EventEmitter();


request("http://www.stackoverflow.com", function(error, response, data) {
    body.data = data;
    body.emit('update');
});

body.on('update', function () {
    console.log(body.data); // HOORAY! THIS WORKS!
});