Kris
Kris

Reputation: 575

Meteor.users.findOne() returns undefined but it's still working

I am gettin' into touch with meteor.js and I am quite confused about some things.

I wrote a new collection :

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');

  }
};

my meteor console output is totally fine I'll get :

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 ======

but in my browser I still get an errorcode :

Exception while simulating the effect of invoking 'commentInsert' TypeError: Cannot read property 'emails' of undefined(…) TypeError: Cannot read property 'emails' of undefined

the function gets called here : 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;
}
});

Upvotes: 3

Views: 2211

Answers (2)

Akerele Victor
Akerele Victor

Reputation: 1

Meteor.users works on the client, just ensure you have published and subscribed to Meteor.users.find({},{}) manually.

Upvotes: 0

aedm
aedm

Reputation: 6564

Meteor.users.findOne(post.userId) doesn't work on the client, since the client only has the current user's data in Meteor.users collection. Make sure your server-side sendEmail is the one that queries Meteor.users, and not the client.

Upvotes: 2

Related Questions