Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make http request to get JSON before express js res.render

How to make http request(s) to get data from remote server(s) and after that pass requested data as view data in express js?

For example code where view is rendered with static data:

var express = require('express');
var router = express.Router();

var news = [{id: 1, title: 'News title'}];

router.get('/', function(req, res, next) {
  res.render('index', { title: 'Main page', news: news });
});

module.exports = router;
like image 871
Rakhat Avatar asked Feb 17 '26 02:02

Rakhat


1 Answers

For instance, using request:

var request = require('request');

router.get('/', function(req, res, next) {
  request(URL, function (err, response, body) {
    if (err || response.statusCode !== 200) {
      return res.sendStatus(500);
    }
    res.render('index', { title : 'Main page', news : JSON.parse(body) });
  });
});

To perform multiple requests, you could use async.map():

var request = require('request');
var async   = require('async');

router.get('/', function(req, res, next) {

  var URLS = [ 'http://...', 'http://...', ... ];

  async.map(URLS, function(url, done) {
    request(url, function (err, response, body) {
      if (err || response.statusCode !== 200) {
        return done(err || new Error());
      }
      return done(null, JSON.parse(body));
    });
  }, function(err, results) {
    if (err) return res.sendStatus(500);
    res.render('index', { title : 'Main page', news : results });
  });
});
like image 77
robertklep Avatar answered Feb 19 '26 14:02

robertklep