我有以下流星方法
hasNoPendingPayments: function() {
var userId = Meteor.userId();
console.log(userId); <---------------------- correctly logs userId
var user = Users.findOne({_id: userId }, { fields: { services: 0 } });
console.log(user); <-------------------------- logs 'undefined'
return hasNoPendingPayments(user);
},
我从上面打电话给这个私人助手
hasNoPendingPayments = function(user) {
// console.log('hasNoPendingPayments ');
// console.log(user);
var payments = Payments.find({ userId: user._id, status: {
$in: [Payments.States.PENDING, Payments.States.PROCESSING]}
});
return payments.count() === 0;
};
我在这里从客户那里打电话
Template.payments.created = function() {
this.hasNoPendingPayments = new ReactiveVar(false);v
};
Template.payments.rendered = function () {
Session.set('showPaymentRequestForm', false);
var self = this;
Meteor.call('hasNoPendingPayments', function(error, result) {
if (result === true) { self.hasNoPendingPayments.set(true); }
});
...
但是,当我最初加载模板时,我在服务器上得到一个未定义的错误(我在代码中标记了位置)。虽然,当我尝试使用相同的userId在客户端上调用相同的查询时,我正确获取用户记录
知道为什么会这样吗?
答案 0 :(得分:1)
试试这个。
Template.payments.rendered = function () {
Session.set('showPaymentRequestForm', false);
var self = this;
if(Meteor.userId()){
Meteor.call('hasNoPendingPayments', function(error, result) {
if (result === true) { self.hasNoPendingPayments.set(true); }
});
}else{
console.log("Seems like user its not logged in at the moment")
}
也许当你制作Meteor.call时,数据尚未准备好
同样可以肯定的是,当您在console.log上运行Users.findOne({_id: userId }, { fields: { services: 0 } });
时会得到什么?
可能发现错误或有一些错字
<强>更新强>
Router.map(function()
{
this.route('payments',
{
action: function()
{
if (Meteor.userId())
this.render();
} else{
this.render('login') // we send the user to login Template
}
}
}
或waitOn
Router.map(function () {
this.route('payments', {
path: '/payments',
waitOn: function(){
return Meteor.subscribe("userData"); //here we render template until the subscribe its ready
}
});
});
答案 1 :(得分:0)
Meteor将所有用户记录存储在Meteor.users
集合
所以请尝试Meteor.users.findOne({_id: userId }....)
而不是Users.findOne({_id: userId }, { fields: { services: 0 } });
在您的服务器方法
中