3

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;
Rakhat
  • 4,783
  • 4
  • 40
  • 50
  • http://stackoverflow.com/questions/9577611/http-get-request-in-node-js-express –  Aug 12 '15 at 09:35

1 Answers1

5

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 });
  });
});
robertklep
  • 198,204
  • 35
  • 394
  • 381
  • It works, thx a lot! Is it possible to make multiple request and after they done pass data to res.render? @robertklep – Rakhat Aug 12 '15 at 09:53