0

我正在尝试对我的应用程序中的远程服务器进行 HTTP 调用

我有一个带有处理实际调用然后将 xml 转换为 json 的函数的包

myPackage = {
baseUrl: "http://12.34.56.78:8080/api",

getBatchList: function() {
    var url = this.baseUrl + "/batchList.xml";

    HTTP.get(url, {auth: "user:pass"}, function(err, res) {
        if (!err) {
            console.log(res);
            xml2js.parseStringSync(res.content, function(error, result){
                if (!error) {
                    console.log(result); //the result is displayed
                    return result;
                };
            });
        };
    });
}
}

然后我在服务器上声明了一个 Meteor.method,因此我可以从客户端调用该函数,因为 myPackage 仅在服务器上可用(它必须是,因为它对域外部进行 http 调用,而我无法从客户端执行)。

if (Meteor.isServer) {
Meteor.methods({
    getBatchList: function() {
        myPackage.getBatchList(function(error, result) {
            if (!error && result) {
                console.log(result); //nothing is logged to the console
                return result;
            };
        });
    }
})
}

但是,由于某种原因,结果似乎没有传递到getBatchList方法中,我怀疑这是我的回调结构方式有问题(我不知道);

最后在客户端调用该方法

if (Meteor.isClient) {
Template.hello.events({
    'click input' : function () {

        Meteor.call("getBatchList", function(error, result) {
            if (result && !error) {
                console.log(result);
            } else {
                console.log("nothing returned!!!");
            };
        });
    }
});
}

这也不会从服务器获得任何结果,没有错误或结果。

任何帮助,将不胜感激。

谢谢。

4

1 回答 1

0

问题是在服务器上运行的代码是异步的,包括 HTTP 请求和函数本身。我将代码更改如下

主要是我们现在返回调用本身,而不是返回 HTTP 调用的结果。

if (Meteor.isServer) {
    Meteor.methods({
        getList: function() {
            var req = myPackage.getList();
            return req;
        }
    })
}; 

和 myPackage getList 函数

myPackage = {
    baseUrl: "http://12.34.56.78:8080/",

    getList: function() {
        var url = this.baseUrl + "/getList.xml";

        var req = HTTP.get(url, {auth: "user:pass"});
        if (req.statusCode === 200) {
            xml2js.parseStringSync(req.content, function(error, result){
                if (!error) {
                    req = result;
                };
            });

        };
        return req;
    }
}
于 2013-10-01T18:33:24.623 回答