I am creating a website which uses an api to dispaly football (soccer) scores, fixtures etc. I have tried to create a global variable to save the request data to and then pass into ejs however this doesn't seem to work.
router.get('/stats', (req, res) => {
request(options, function (error, response, body) {
if (error) throw new Error(error);
top_scorer_data = JSON.parse(body)
});
request(options2, function (error, response, body) {
if (error) throw new Error(error);
top_assists_data = JSON.parse(body)
});
request(options3, function (error, response, body) {
if (error) throw new Error(error);
top_red_cards_data = JSON.parse(body)
});
request(options4, function (error, response, body) {
if (error) throw new Error(error);
top_yellow_cards_data = JSON.parse(body)
});
res.render('bundesliga/stats', {})
})
You should follow DRY principle and move
requestto a service or a helper function. You shouldn't use global variables, use promises instead, and wait for all requests to finish.So, you should promisify request method (you should really migrate to
axiosornode-fetch, becauserequestis deprecated)and then use
Promise.allto make all the requests with each option, and then gather results into variables, which you then pass to the.rendermethod.Try this: