Meteor.users.findOne()返回undefined,但它仍然工作
问题描述:
我刚开始接触meteor.js,我对一些事情感到困惑。Meteor.users.findOne()返回undefined,但它仍然工作
我写了一个新的集合:
sendEmailAfterNotification = function(comment) {
var post = Posts.findOne(comment.postId);
if (comment.userId !== post.userId) {
Meteor.call('sendEmail',
Meteor.users.findOne(post.userId).emails[0].address,
'[email protected]',
comment.author + ' answered on your post : ' + post.title,
'random bodytext');
}
};
我的流星控制台输出完全是罚款我会得到:
I20160424-16:00:54.758(2)? ====== BEGIN MAIL #0 ======
I20160424-16:00:54.766(2)? (Mail not sent; to enable sending, set the MAIL_URL environment variable.)
I20160424-16:00:54.767(2)? MIME-Version: 1.0
I20160424-16:00:54.767(2)? From: [email protected]
I20160424-16:00:54.767(2)? To: [email protected]
I20160424-16:00:54.767(2)? Subject: testuser answered on your post : foobar
I20160424-16:00:54.767(2)? Content-Type: text/plain; charset=utf-8
I20160424-16:00:54.767(2)? Content-Transfer-Encoding: quoted-printable
I20160424-16:00:54.767(2)?
I20160424-16:00:54.768(2)? random body text
I20160424-16:00:54.768(2)? ====== END MAIL #0 ======
,但在我的浏览器我仍然得到一个错误代码:
Exception while simulating the effect of invoking 'commentInsert' TypeError: Cannot read property 'emails' of undefined(…) TypeError: Cannot read property 'emails' of undefined
函数在这里调用: comments.js
Comments = new Mongo.Collection('comments');
Meteor.methods({
commentInsert: function(commentAttributes) {
check(this.userId, String);
check(commentAttributes, {
postId: String,
body: String
});
var user = Meteor.user();
var post = Posts.findOne(commentAttributes.postId);
if (!post)
throw new Meteor.Error('invalid-comment', 'You must comment on a post');
comment = _.extend(commentAttributes, {
userId: user._id,
author: user.username,
submitted: new Date()
});
// update the post with the number of comments
Posts.update(comment.postId, {$inc: {commentsCount: 1}});
// create the comment, save the id
comment._id = Comments.insert(comment);
// now create a notification, informing the user that there's been a comment
createCommentNotification(comment);
// send an email to the post owner - if it's not the owner
sendEmailAfterNotification(comment);
return comment._id;
}
});
答
Meteor.users.findOne(post.userId)
不会在客户端上工作,因为客户端只在Meteor.users
收集当前用户的数据。确保你的服务器端sendEmail
是查询Meteor.users
,而不是客户端。