函数中的Node.js请求

函数中的Node.js请求,node.js,express,request,Node.js,Express,Request,我对Node和Javascript都是新手。我正在使用请求模块从web服务获取JSON响应。我不确定是否最好将我的请求转换为函数,或者将请求嵌入到另一个函数中。不管怎样,我都没有任何运气 // Module imports var express = require('express'); var router = express.Router(); var request = require('request'); var options = { url: 'https:www.exam

我对Node和Javascript都是新手。我正在使用请求模块从web服务获取JSON响应。我不确定是否最好将我的请求转换为函数,或者将请求嵌入到另一个函数中。不管怎样,我都没有任何运气

// Module imports
var express = require('express');
var router = express.Router();
var request = require('request');

var options = {
  url: 'https:www.example.com/wow.json',
  auth: {
    user: 'user',
    password: 'pass',
    json: true
  }
}

request(options, function (err, res, body) {
  if (err) {
    console.log(err);
    return;
  }
  requestResult = JSON.parse(body); // All data
  wowUsage = requestResult.publishers[0].used;
});

// Sending data to the template view
router.get('/', function(req, res, next) {
  res.render('template', {tempVar: wowUsage});
});

module.exports = router;

每当我启动web服务器时,该代码执行一次,然后就完成了。刷新页面不会加载任何新信息。我应该将请求嵌入函数中,然后在router.get语句中调用该函数吗?我试图将请求嵌套在函数中,但我根本无法使其工作。

如果将请求放在单独的函数中,请确保向使用适当数据调用的新函数添加回调参数。例如:

function getJSON(callback) {
  request(options, function(err, res, body) {
    if (err)
      return callback(err);
    try {
      callback(null, JSON.parse(body).publishers[0].used);
    } catch (ex) {
      callback(ex);
    }
  });
}

router.get('/', function(req, res, next) {
  getJSON(function(err, wowUsage) {
    if (err) {
      console.log(err.stack);
      return res.status(500);
    }
    res.render('template', {tempVar: wowUsage});
  });
});