【问题标题】:How to Store the Response of a GET Request In a Local Variable In Node JS如何将 GET 请求的响应存储在 Node JS 的局部变量中
【发布时间】:2015-05-27 14:40:51
【问题描述】:

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

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

这是我使用的代码:

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

【问题讨论】:

  • 搬家前试试看这个问题:stackoverflow.com/questions/23667086/…
  • body 已经是保存响应的函数中的局部变量。您可以将该值复制到请求之前声明的另一个变量。但是,由于它是异步执行的,因此您无法保证在尝试使用超出 function (error, response, body) 内部调用的内容之前请求已完成。

标签: node.js get


【解决方案1】:

最简单的方法(但它有缺陷——见下文)是将body 移动到模块的范围内。

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


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

但是,这可能会助长错误。例如,您可能倾向于在调用request() 之后立即添加console.log(body)

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

【讨论】:

  • Trott 兄弟,根据您的第三个代码,变量数据将持有 GET 响应对吗?
  • body 将包含第一个示例中的响应,body.data 将包含最后一个示例中的响应。
  • 关于控制结构的解释的奖金。这是一个很好的答案。
猜你喜欢
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多