如何从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!!! })