如何在Node JS中的本地variables中存储GET请求的响应

我知道如何使用request模块对URL进行GET请求。 最终,代码只是在产生它的命令shell中打印GET响应。

如何将这些GET响应存储在本地variables中,以便在程序中的其他位置使用它?

这是我使用的代码:

 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()

 var request = require("request"); var body; request("http://www.stackoverflow.com", function(error, response, data) { body = data; }); console.log(body); // THIS WILL NOT WORK! 

这是行不通的,因为request()是asynchronous的,所以它在body被设置在callback之前返回控制。

通过将body创build为事件发射器并订阅事件,可能会更好。

 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! }); 

另一种select是切换到使用承诺 。