How to get data out of a Node.js http get request How to get data out of a Node.js http get request javascript javascript

How to get data out of a Node.js http get request


Of course your logs return undefined : you log before the request is done. The problem isn't scope but asynchronicity.

http.request is asynchronous, that's why it takes a callback as parameter. Do what you have to do in the callback (the one you pass to 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();


Simple Working Example of Http request using 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();    });}


Shorter example using http.get:

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