从http请求返回数据

时间:2014-01-29 22:15:27

标签: javascript node.js

我正在使用Node.js构建一个小框架,我会尝试使用来自API的数据,但我不知道为什么它不起作用(异步但是??)。

var request = require('request');

var IndexController = function(request, parameters) {
    this.request = request;
    this.parameters = parameters;
}

IndexController.prototype.execute = function () {
    var url = "https://prod.api.pvp.net/api/lol/euw/v1.1/champion?api_key=#my-private-key";
    var data;

    request(url, function(error, response, body) {
        if (!error && response.statusCode == 200) {
            data = JSON.parse(body);
        }
    });

    return data;
}


module.exports = IndexController;

一些建议可能非常棒!顺便说一句,我也试过xmlhttprequest。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

基本上,如果你在那里返回数据,它将是空的。那是因为Node.js的异步函数处理。 (函数调用'request(url,...)'在“相同”时间内执行,返回变量'data')。

查看上面提到的请求函数:它接收一个回调函数,包含函数完成后将要执行的所有逻辑。

首先需要的是以下内容;添加一个回调函数参数:

IndexController.prototype.execute = function (callbackFunc) {
    // do request as you intended
    request(url, function(error, response, body) {
    if (!error && response.statusCode == 200) {
        data = JSON.parse(body);
        callbackFunc(data); // then call callback-function with results
    }        
});

在逻辑的调用部分中,实例化IndexController并调用'IndexController.execute()',然后使用callback-function作为参数调用它(即应该对结果做什么):< / p>

var controller = IndexController(req, params);
controller.execute(function (data) {
    console.log(data);
});

希望这是一个开始。