我知道使用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;
});
但是,这可能会导致错误。例如,您可能倾向于在调用
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!
});
另一种选择是switch to using promises。
关于node.js - 如何在 Node JS的局部变量中存储GET请求的响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30485756/