Meteor:提供调用方法结果的异常

时间:2015-09-23 19:13:37

标签: javascript meteor

已经发布了类似的问题,但没有一个与我遇到的问题完全匹配。我正在对内部服务器进行简单的POST以获取产品数据。调用成功,当我在服务器端执行console.log时,我看到JSON数据正确记录到我的终端。问题出现在客户端,在回调中,结果和错误都是未定义的。

服务器:

Meteor.methods({
    ProductSearch: function(searchTerm) {
        var method = 'POST';
        var url = 'server';
        var options = {
            headers:{"content-type":"application/json"},
            data: { 
                query:"trees"
            }
        };
        return HTTP.call(method, url, options, function (error, result) {
            if (error) {
                console.log("ERROR: ", result.statusCode, result.content);
            } else {
                var txt = JSON.parse(result.content);
                console.log("SUCCESS: Found "+txt.totalResults+" products");
            } 
        });
    }
});

客户端:

Meteor.call('ProductSearch', searchTerm, function (error, result) {
    if (error) {
        console.log("error occured on receiving data on server. ", error );
    } else {
        var respJson = JSON.parse(result.content);
        Session.set("productSearchResults", respJson);
    }
});

当我在回调时记录错误结果的值时,它们都是未定义的,并且我收到以下错误:传递结果的异常调用' ProductSearch':TypeError:无法读取属性'内容'未定义的

1 个答案:

答案 0 :(得分:1)

在您的服务器端方法中,您没有正确返回HTTP.call的结果,因为您使用的是异步版本,HTTP.call将返回undefined并且结果只能在回调中访问。

使用HTTP.call的同步版本,你会没事的。

try{
  var result = HTTP.call(method, url, options);
  return JSON.parse(result.content);
}
catch(exception){
  console.log(exception);
}

有关其他信息,请参阅HTTP.call的相应文档。

  

asyncCallback 功能

     

可选回调。如果通过,则该方法运行   异步,而不是同步,并调用asyncCallback。上   客户端,这个回调是必需的。

https://docs.meteor.com/#/full/http_call