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