如何验证Meteor.user用户名是否存在?

时间:2014-04-27 00:22:09

标签: meteor

我正在构建一个messenger应用程序,在创建对话之前,我想验证用户是否存在。如果是,那么它将创建对话。如果没有,那么它应该返回一个错误。我一直在服务器端使用此代码,但出于某种原因,它无法正常工作。我尝试了很多不同的调整,但这基本上就是我的结构:

Meteor.methods({
createConversation: function(secondPerson) {

    function doesUserExist(secondPerson) {
        var userx = Meteor.users.findOne({username: secondPerson});
        if (userx === secondPerson) {
            return false;
        } else { 
            return true;
        }
    }

    if (doesUserExist()) { 
        Conversations.insert({
          person1: Meteor.user().username,
          person2: secondPerson
        });

    } else { 
        Conversations.insert({
          person1: "didn't work"
        });
    }



}
});

1 个答案:

答案 0 :(得分:6)

您缺少的要点是find返回游标,而findOne返回文档。以下是实现该方法的一种方法:

Meteor.methods({
  createConversation: function(username) {
    check(username, String);

    if (!this.userId) {
      throw new Meteor.Error(401, 'you must be logged in!');
    }

    if (Meteor.users.findOne({username: username})) {
      return Conversations.insert({
        person1: Meteor.user().username,
        person2: username
      });
    } else {
      throw new Meteor.Error(403, username + " does not exist!");
    }
  }
});

请注意以下功能:

  • 验证username是字符串
  • 要求用户登录以创建对话
  • 将用户存在检查缩减为一行
  • 返回新会话的id
  • 使用Meteor.Error以及可在客户端上看到的解释

要使用它,只需打开浏览器控制台并尝试拨打电话:

Meteor.call('createConversation', 'dweldon', function(err, id){console.log(err, id);});