Estoy tratando de que mi función devuelva la solicitud http get, sin embargo, cualquier cosa que haga parece perderse en el? Alcance ?. Soy nuevo en Node.js, por lo que cualquier ayuda sería apreciada
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);
}

statusCodees una propiedad del objeto de respuesta. Tampoco pude encontrar la documentación adecuada para elServerResponseobjeto, solo ejemplos en los documentos para los métodosgetyrequest.Ejemplo más corto usando http.get:
require('http').get('http://httpbin.org/ip', (res) => { res.setEncoding('utf8'); res.on('data', function (body) { console.log(body); }); });fuente
endevento de respuesta y usan elerrrorevento de solicitud .error eventque se activará si la conexión se pierde mientras la solicitud está en curso o si ocurre algún otro problema durante la transmisión.de learnyounode:
var http = require('http') http.get(options, function (response) { response.setEncoding('utf8') response.on('data', console.log) response.on('error', console.error) })'opciones' es la variable de host / ruta
fuente
Ejemplo de trabajo simple de solicitud Http usando node.
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(); }); }fuente
de 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) })) })fuente
Esta es mi solución, aunque seguro que puedes usar muchos módulos que te dan el objeto como promesa o similar. De todos modos, te faltaba otra devolución de llamada
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); }en algún otro lugar
getData(function(data){ // YOUR CODE HERE!!! })fuente
Creo que es demasiado tarde para responder a esta pregunta, pero recientemente enfrenté el mismo problema, mi caso de uso fue llamar a la API JSON paginada y obtener todos los datos de cada paginación y agregarlos a una sola matriz.
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);Como mencionó @ackuser, podemos usar otro módulo, pero en mi caso de uso tuve que usar el nodo
https. Esperando que esto ayude a otros.fuente
httpspara emitir una solicitud https.