Rakhat
Rakhat

Reputation: 4942

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;

Upvotes: 3

Views: 5828

Answers (1)

robertklep
robertklep

Reputation: 203484

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

Upvotes: 5

Related Questions