由于某些奇怪的原因,iron-router
随机返回undefined。
this.route('pollyShow', {
path: '/polly/:_id',
template: 'polly_show',
notFoundTemplate: 'notFound',
before: function () {
var id = this.params._id;
var poll = Polls.findOne({_id: id});
console.log(poll);
var ip_array = poll.already_voted;
$.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
ip_voted = ip_array.indexOf(data.host);
if (ip_voted > -1) {
Router.go('pollyResults', {_id: id});
}
});
},
data: function() {
return Polls.findOne({_id: this.params._id});
}
});
有时它正常返回,而有时它只返回undefined。
这背后有什么理由吗?
答案 0 :(得分:0)
出现此问题是因为有时会填充Polly
集合,而在路由执行时其他时间未填充。
在路由配置中使用waitOn
选项显式waiting on a subscription
可以防止出现此问题。
来自docs:
默认情况下,新的Meteor应用程序包括autopublish和insecure软件包,它们共同模仿每个客户端对服务器数据库具有完全读/写访问权限的影响。这些是有用的原型设计工具,但通常不适合生产应用程序。准备好后,只需删除包。
要删除包裹,请致电meteor remove <package-name>
。
然后,您需要显式发布要在服务器上的客户端上看到的记录:
服务器/ publications.js 强>:
Meteor.publish('all_of_polly', function () { return Polls.find({}); });
在客户端订阅:
this.route('pollyShow', {
path: '/polly/:_id',
template: 'polly_show',
notFoundTemplate: 'notFound',
waitOn: function () { return Meteor.subscribe('all_of_polly'); }
// ...
});