无法使用方法调用meteor包中的函数?

时间:2015-01-30 20:06:12

标签: javascript meteor meteorite

我试图使用我在大气层(aldeed:geocoder)上找到的使用node-geocoder包的地理编码器包。 meteor包指定为了执行新的地理编码,我要创建一个新的GeoCoder实例,然后在其上调用地理编码方法,传入一个地址字符串,如下所示:

var geo = new GeoCoder();
var result = geo.geocode("location");

如果我将上面的内容放在我的app和console.log结果的服务器文件中的server.js文件中,我会按预期将一个对象打印到终端。我遇到的问题是当我尝试使用流星方法调用它时,响应来自搜索框的用户输入。我的模板助手有这个:

Template.layout.events({
    'submit form': function(e) {
        e.preventDefault();

    var search = {
        location: $(e.target).find('[name=search]').val()
    }

    console.log(search.location);

    Meteor.call('getGeoCode', search.location, function(result) {
        console.log(result)
    });
}

});

和集合的文件,forecasts.js中有这个:

Forecasts = new Mongo.Collection('forecasts');


    Meteor.methods({
        getGeoCode: function(search) {
            var geo = new GeoCoder();
            result = geo.geocode(search);
            return result;
        }
    });

但是当我尝试一下时,我在控制台中收到错误,告诉我GeoCoder未定义。具体做法是:

  

"在模拟调用' getGeoCode'" ReferenceError:未定义GeoCoder

那么,这里发生了什么?为什么不能用该方法创建一个新的GeoCoder实例并像我一样调用它?

1 个答案:

答案 0 :(得分:0)

正如您在地理编码器package.js中看到的那样,GeoCoder命名空间和文件只会导出到服务器。您的错误表明该方法已在客户端上定义。当您调用该方法时,客户端会尝试运行其版本并引发错误,因为它无法访问GeoCoder API。

最简单的解决方案是在/server目录下的文件中定义此方法。或者,您可以使用Meteor.isServer

的检查来包装共享方法定义