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

我试图让我的函数返回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 :你在请求完成之前logging日志。 问题不是范围,而是不同步

http.request是asynchronous的,这就是为什么它需要一个callback参数。 在callback(你传递给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(); 

从learnyounode:

 var http = require('http') var bl = require('bl') http.get(process.argv[2], function (response) { response.pipe(bl(function (err, data) { if (err) return console.error(err) data = data.toString() console.log(data) })) }) 

使用http.get更简单的例子:

 require('http').get('http://httpbin.org/ip', (res) => { res.setEncoding('utf8'); res.on('data', function (body) { console.log(body); }); }); 

从learnyounode:

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

“选项”是主机/pathvariables

这是我的解决scheme,虽然可以肯定的是,你可以使用很多模块,将对象作为承诺或类似的东西给你。 无论如何,你错过了另一个callback

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