我知道使用该request模块向URL发出GET请求的方法。最终,该代码仅在产生它的命令外壳中打印GET响应。
request
如何将这些GET响应存储在本地变量中,以便可以在程序中的其他地方使用它?
这是我使用的代码:
var request = require("request"); request("http://www.stackoverflow.com", function(error, response, body) { console.log(body); });
最简单的方法(但也有陷阱-见下文)是body进入模块范围。
body
var request = require("request"); var body; request("http://www.stackoverflow.com", function(error, response, data) { body = data; });
但是,这可能会导致错误。例如,您可能倾向于console.log(body)在致电之后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()异步,这将不起作用,因此它将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! });
另一个选择是切换到使用Promise。