【问题标题】:Send a response from a function to route in expressjs从函数发送响应以在 expressjs 中路由
【发布时间】:2015-09-28 19:47:22
【问题描述】:

我正在尝试在快速服务器上沿我的路线从 api 返回 JSON 数据。我对nodejs如何处理这种操作有点困惑。我在同一个文件中有一个函数和一个路由,该路由有效,因为我得到了返回的视图,以及我在控制台中想要的数据。路线和方法如下所示:

function getData() {
    request(url, function (error, response, body) {
        if (!error && response.statusCode == 200) {
          console.log(body) // Show the HTML for the Google homepage.
          return response.body; 
        };
    });
};

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('index', { title: 'About', data: getData() });
});

我想要来自getData() 的数据来响应路线。我以为这样就可以了,但它只会将数据打印到控制台,我看不到问题。

【问题讨论】:

  • res.render 呈现模板化视图。您使用的是什么视图引擎,您的模板中有什么?

标签: javascript node.js express


【解决方案1】:

由于 http 请求的异步特性,这根本是不可能的。相反,您必须对其进行重组以进行回调。

function getData(callback) {
    request(url, function (error, response, body) {
        if (error) {
            return callback(error);
        }
        if (response.statusCode == 200) {
          console.log(body) // Show the HTML for the Google homepage.
          //return response.body; 
          callback(null, response.body);
        } else {
            callback(response.statusCode);
        }
    });
};

/* GET home page. */
router.get('/', function(req, res, next) {
    getData(function (err, data) {
        if (err) {
            return next(err);
        }
        res.render('index', { title: 'About', data: data });
    });    
});

【讨论】:

  • 所以这行得通,但我仍然不清楚为什么。我想我很难处理回调。有时我应该或不应该使用回调吗?更改后的getData() 是用 nodejs/JavaScript 编写基本方法的典型方式吗?为什么我可以简单地console.log body,但同样的方法不会返回数据?
  • 从内部函数返回不会从外部返回。
猜你喜欢
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2019-07-12
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多