函数

时间:2016-04-04 21:56:23

标签: 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.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语句中调用该函数吗?我试图将请求嵌套在一个函数中,但我根本无法完成这项工作。

1 个答案:

答案 0 :(得分:2)

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

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