如何从节点中获取数据.js http get request
How to get data out of a Node.js http get request
我试图让我的函数返回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();
使用node的Http请求的简单工作示例。
const http = require('https')
httprequest().then((data) => {
const response = {
statusCode: 200,
body: JSON.stringify(data),
};
return response;
});
function httprequest() {
return new Promise((resolve, reject) => {
const options = {
host: 'jsonplaceholder.typicode.com',
path: '/todos',
port: 443,
method: 'GET'
};
const req = http.request(options, (res) => {
if (res.statusCode < 200 || res.statusCode >= 300) {
return reject(new Error('statusCode=' + res.statusCode));
}
var body = [];
res.on('data', function(chunk) {
body.push(chunk);
});
res.on('end', function() {
try {
body = JSON.parse(Buffer.concat(body).toString());
} catch(e) {
reject(e);
}
resolve(body);
});
});
req.on('error', (e) => {
reject(e.message);
});
// send the request
req.end();
});
}
使用 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)
})
"选项"是主机/路径变量
来自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)
}))
})
我认为
现在回答这个问题为时已晚,但我最近遇到了同样的问题,我的用例是调用分页的 JSON API 并从每个分页中获取所有数据并将其附加到单个数组。
const https = require('https');
const apiUrl = "https://example.com/api/movies/search/?Title=";
let finaldata = [];
let someCallBack = function(data){
finaldata.push(...data);
console.log(finaldata);
};
const getData = function (substr, pageNo=1, someCallBack) {
let actualUrl = apiUrl + `${substr}&page=${pageNo}`;
let mydata = []
https.get(actualUrl, (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', async () => {
if (JSON.parse(data).total_pages!==null){
pageNo+=1;
somCallBack(JSON.parse(data).data);
await getData(substr, pageNo, someCallBack);
}
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
}
getData("spiderman", pageNo=1, someCallBack);
就像@ackuser提到的,我们可以使用其他模块,但在我的用例中,我不得不使用节点https
。希望这对其他人有所帮助。
这是我的解决方案,尽管您可以肯定地使用许多模块来为您提供对象作为承诺或类似内容。无论如何,您错过了另一个回调
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!!!
})
相关文章:
- Angular js http get返回所有页面
- Acync JS HTTP请求通知请求
- Angular.js-$http.get-使用文件中的缓存
- Node.js HTTP/NET——连接和请求之间的区别
- Angular JS `$http`发送POST而不是GET
- Angular JS $http request?
- angular.js$http.post将数据发送到Rails4
- node.js http服务器并发问题
- "对象不是函数“;当将Node.js HTTP服务器对象传递给Socket.IO时
- Node.js http代理删除websocket请求
- 使用node.js http代理测量流量
- node.js http请求在5次请求后锁定
- angular js http get
- 节点 JS HTTP 请求不使用 http 请求
- Meteor.js HTTP.get 获取 JSON 引号并解析结果似乎包含一个回调函数
- Node JS http-proxy - 创建的 URL 存在问题
- 节点.js:HTTP 获取请求
- 如何使用本机节点 JS HTTP 库将图像写入缓冲区
- Angular Js $http.post 方法无法访问 Zend Framework 中的数据
- node.js http.get() throws: events.js:72 ECONNREFUSED