在express js res.render之前发出http请求以获取JSON

Rak*_*hat 3 node.js express

如何发出http请求从远程服务器获取数据,然后将请求的数据作为express js中的视图数据传递?

例如,使用静态数据呈现视图的代码:

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;
Run Code Online (Sandbox Code Playgroud)

rob*_*lep 5

例如,使用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) });
  });
});
Run Code Online (Sandbox Code Playgroud)

要执行多个请求,您可以使用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 });
  });
});
Run Code Online (Sandbox Code Playgroud)