我试图使用我在大气层(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实例并像我一样调用它?
答案 0 :(得分:0)
正如您在地理编码器package.js中看到的那样,GeoCoder
命名空间和文件只会导出到服务器。您的错误表明该方法已在客户端上定义。当您调用该方法时,客户端会尝试运行其版本并引发错误,因为它无法访问GeoCoder
API。
最简单的解决方案是在/server
目录下的文件中定义此方法。或者,您可以使用Meteor.isServer
。