无法在nodejs中返回请求方法的主体

时间:2016-02-25 05:16:20

标签: node.js controller request

我正在尝试通过请求方法获取JSON响应并返回输出,以便在调用函数时我可以将其存储在变量中。当我在请求方法中记录响应时,它工作正常。但是当我返回输出时,它不会返回。

$soap_object->on_action( sub { $soapAction->{Auth} });

        my $response = $soap_object->Auth(
                                SOAP::Data->type('string')->name('strUserName')->value($user_name),
                                SOAP::Data->type('string')->name('strPassword')->value($password)
                        );

1 个答案:

答案 0 :(得分:0)

你的方法实际上做的是运行以下两行

var request = require('request');
request(url, function(error, response, body) {

...然后立即退出该功能,此时您的调用代码将被取消定义。在请求完成之前,不会调用回调,这可能要晚得多。

为了使它工作,你的函数也需要一个回调函数,当函数实际完成时调用,如:

var getAPIresponse = function(url, cb) {
    var request = require('request');
    request(url, function(error, response, body) {
        if(!error && response.statusCode == 200) {
            console.log(body); // WORKS PERFECTLY
        } else {
            console.log("Error: "+ error);
        }
        cb(error, body);
    });
};

router.get('/', function (req, res) {

    var poolList =  getAPIresponse("www.addAURL", function(err, poolList) {

        // This is run in a callback once the request is done.    
        console.log(poolList);
        res.render('index', model);

    });
});

另一种方法是使用promises,当回调数量失控时,可以稍微清理代码。