无法使用方法调用流星包中的函数?
Unable to call function in meteor package using method?
我正在尝试使用我在 atmosphere (aldeed:geocoder) 上找到的地理编码器包,它使用 node-geocoder 包。 meteor 包指定为了执行新的地理编码,我要创建一个新的 GeoCoder 实例,然后在其上调用地理编码方法,传入地址字符串,如下所示:
var geo = new GeoCoder();
var result = geo.geocode("location");
如果我将以上内容放入我的应用程序服务器文件中的 server.js 文件中并得到 console.log 结果,我会按预期将 object 打印到终端。我 运行 遇到的问题是当我尝试使用 meteor 方法调用它时,以响应来自搜索框的用户输入。我的模板助手中有这个:
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)
});
}
});
和 collection 的文件,forecasts.js 中有这个:
Forecasts = new Mongo.Collection('forecasts');
Meteor.methods({
getGeoCode: function(search) {
var geo = new GeoCoder();
result = geo.geocode(search);
return result;
}
});
但是当我尝试它时,我在控制台中收到一条错误消息,告诉我 GeoCoder 未定义。具体来说:
"Exception while simulating the effect of invoking 'getGeoCode'" ReferenceError: GeoCoder is not defined
那么,这是怎么回事?为什么不能在该方法中创建一个新的 GeoCoder 实例并像我一样调用它?
正如您从地理编码器的 package.js 中看到的那样,GeoCoder
命名空间和文件仅导出到服务器。您的错误表明该方法是在客户端上定义的。当您调用该方法时,客户端会尝试 运行 其版本并抛出错误,因为它无权访问 GeoCoder
API.
最简单的解决方案就是在 /server
目录下的文件中定义此方法。或者,您可以通过检查 Meteor.isServer
.
来包装共享方法定义
我正在尝试使用我在 atmosphere (aldeed:geocoder) 上找到的地理编码器包,它使用 node-geocoder 包。 meteor 包指定为了执行新的地理编码,我要创建一个新的 GeoCoder 实例,然后在其上调用地理编码方法,传入地址字符串,如下所示:
var geo = new GeoCoder();
var result = geo.geocode("location");
如果我将以上内容放入我的应用程序服务器文件中的 server.js 文件中并得到 console.log 结果,我会按预期将 object 打印到终端。我 运行 遇到的问题是当我尝试使用 meteor 方法调用它时,以响应来自搜索框的用户输入。我的模板助手中有这个:
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)
});
}
});
和 collection 的文件,forecasts.js 中有这个:
Forecasts = new Mongo.Collection('forecasts');
Meteor.methods({
getGeoCode: function(search) {
var geo = new GeoCoder();
result = geo.geocode(search);
return result;
}
});
但是当我尝试它时,我在控制台中收到一条错误消息,告诉我 GeoCoder 未定义。具体来说:
"Exception while simulating the effect of invoking 'getGeoCode'" ReferenceError: GeoCoder is not defined
那么,这是怎么回事?为什么不能在该方法中创建一个新的 GeoCoder 实例并像我一样调用它?
正如您从地理编码器的 package.js 中看到的那样,GeoCoder
命名空间和文件仅导出到服务器。您的错误表明该方法是在客户端上定义的。当您调用该方法时,客户端会尝试 运行 其版本并抛出错误,因为它无权访问 GeoCoder
API.
最简单的解决方案就是在 /server
目录下的文件中定义此方法。或者,您可以通过检查 Meteor.isServer
.