【问题标题】:Node.js request in function函数中的 Node.js 请求
【发布时间】:2016-04-04 21:56:22
【问题描述】:

我是 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;

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

【问题讨论】:

    标签: node.js express request


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-06
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      相关资源
      最近更新 更多