我正在尝试在我的应用程序中对远程服务器进行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
方法,我怀疑我回调结构的方式有问题(我不知道); < / p>
最后在客户端上调用方法
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!!!");
};
});
}
});
}
也不会从服务器获得任何错误或结果的任何结果。
任何帮助将不胜感激。
感谢。
答案 0 :(得分: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;
}
}