如何从Node.js的http get请求中获取数据

我试图让我的函数返回http get请求,但是,无论我怎么做,似乎都会在 "范围 "中丢失。我是Node.js的新手,希望能得到任何帮助。

function getData(){
  var http = require('http');
  var str = '';

  var options = {
        host: 'www.random.org',
        path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
  };

  callback = function(response) {

        response.on('data', function (chunk) {
              str += chunk;
        });

        response.on('end', function () {
              console.log(str);
        });

        //return str;
  }

  var req = http.request(options, callback).end();

  // These just return undefined and empty
  console.log(req.data);
  console.log(str);
}
解决办法

当然,你的日志会返回undefined:你在请求完成之前就进行了记录。问题不在于范围,而在于同步性

http.request是异步的,这就是为什么它需要一个回调作为参数。在回调中做你必须做的事情(你传递给response.end的那个):

callback = function(response) {

  response.on('data', function (chunk) {
    str += chunk;
  });

  response.on('end', function () {
    console.log(req.data);
    console.log(str);
    // your code here if you want to use the results !
  });
}

var req = http.request(options, callback).end();
评论(6)

来自Learnnyounode:

var http = require('http')  

http.get(options, function (response) {  
  response.setEncoding('utf8')  
  response.on('data', console.log)  
  response.on('error', console.error)  
})

'options'是主机/路径变量

评论(0)

这是我的解决方案,尽管你肯定可以使用很多模块,把对象作为一个承诺或类似的东西给你。总之,你缺少另一个回调

function getData(callbackData){
  var http = require('http');
  var str = '';

  var options = {
        host: 'www.random.org',
        path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
  };

  callback = function(response) {

        response.on('data', function (chunk) {
              str += chunk;
        });

        response.on('end', function () {
              console.log(str);
          callbackData(str);
        });

        //return str;
  }

  var req = http.request(options, callback).end();

  // These just return undefined and empty
  console.log(req.data);
  console.log(str);
}

在其他地方

getData(function(data){
// YOUR CODE HERE!!!
})
评论(1)