NodeJS - Third party Api call from app.js
17,054
You are returning response from outside of function call that gets data from 3rd party api. You need to return response from res.on('end'
section. It is because api call is asynchronous and we have to wait for response to come.
res.on('end', function() {
console.log('ended too');
maybe = JSON.parse(body);
console.log(maybe.city);
response.send(maybe);
});
Complete code is
router.post('/get_data', function(request, response){
var city_name = request.body.city_name;
if(city_name in city_name_done){
}
else {
city_name_done.push(city_name);
console.log('city_name: ' + city_name);
var options = {
host : 'api.openweathermap.org',
path : '/data/2.5/forecast/daily?q=' + city_name + '&mode=json&units=metric&cnt=14&appid=75e843de569fb57a783c2e73fd9a7bb5',
method : 'GET'
}
var maybe = '';
console.log('till here')
var req = http.request(options, function(res){
var body = "";
res.on('data', function(data) {
console.log('data came');
body += data;
});
res.on('end', function() {
console.log('ended too');
maybe = JSON.parse(body);
console.log(maybe.city);
response.send(maybe);
});
});
console.log('here too man');
req.on('error', function(e) {
console.log('Problem with request: ' + e.message);
});
res.end();
}
});
Related videos on Youtube
Author by
Shlok Gandhi
I am sort of amateur coder and discovering myself here!
Updated on June 04, 2022Comments
-
Shlok Gandhi over 1 year
I need to call 3rd party api from backend in NodeJS and return the data to ajax call in frontend
Below is my code:
router.post('/get_data', function(request, response){ var city_name = request.body.city_name; if(city_name in city_name_done){ } else { city_name_done.push(city_name); console.log('city_name: ' + city_name); var options = { host : 'api.openweathermap.org', path : '/data/2.5/forecast/daily?q=' + city_name + '&mode=json&units=metric&cnt=14&appid=75e843de569fb57a783c2e73fd9a7bb5', method : 'GET' } var maybe = ''; console.log('till here') var req = http.request(options, function(res){ var body = ""; res.on('data', function(data) { console.log('data came'); body += data; }); res.on('end', function() { console.log('ended too'); maybe = JSON.parse(body); console.log(maybe.city); }); }); console.log('here too man'); req.on('error', function(e) { console.log('Problem with request: ' + e.message); }); response.send(maybe); } });
I am able to get the city_name parameter from ajax post request from frontend side however I get 500 internal server error everytime I execute the post request
PS: Pardon my English and even the level of the question as I am an absolute beginner in NodeJS
-
Kingalione over 7 yearsis a path /get_data defined?
-
-
kurumkan over 6 yearswhy not use axios on server side?
-
Yash over 6 yearshello @Zohaib Ijaz can u give me the answer my question ...my questions is when i hit the third party api then its not send the response like err or data . how can i handle this situations in my node js applications.