Meteor显示Accounts.createUser错误

时间:2015-03-29 14:47:13

标签: meteor

我在Meteor应用程序中有以下代码,我在其中创建新用户,分配他们' basic'角色。然而,在处理Accounts.createUser时,我在客户端显示的错误显示有问题,有人可以告诉我如何将Accounts.createUser返回的错误返回到服务器上,如下面的代码所示。感谢

/server/users.js

          Meteor.methods({
            'createMemberAccount': function (data, role) {    
              var userId;

              Meteor.call('createNewAccount', data, function(err, result) {
                  if (err) {
                    return err;
                  }
                  console.log('New account id: '+ result);

                  Roles.addUsersToRoles(result, role);
                  return userId = result;
              });

              return userId;
            },
            'createNewAccount': function (adminData) {
                return Accounts.createUser({email: adminData.email, password : adminData.password, roles: adminData.roles});
            }
          });

/client/signup.js

        Template.signupForm.events({

          'submit #signup-form': function(e, t){
            e.preventDefault();

            var userData = {};
            userData.email = $(e.target).find('[name=email]').val();
            userData.password = $(e.target).find('[name=password]').val();
            userData.roles = ['basic'];

              Meteor.call('createMemberAccount', userData, 'basic', function(err, userId) {
                  if (!err) {
                    console.log('All OK');
                  } else {
                    console.log('Error: ' + err.message);
                  }
                });
            return false;
          }

        });

3 个答案:

答案 0 :(得分:1)

由于您正在创建静态rol "basic",因此您不需要执行methodsMeteor.calls对,而是可以使用

因此,请在客户端使用v,就像这样。

Template.register.events({
    'submit #register-form' : function(e, t) {
      e.preventDefault();
      var email = t.find('#account-email').value
        , password = t.find('#account-password').value;

        // Trim and validate the input

      Accounts.createUser({email: email, password : password}, function(err){
          if (err) {
            // Inform the user that account creation failed
          } else {
            // Success. Account has been created and the user
            // has logged in successfully. 
          }

        });

      return false;
    }
  });

如果您发现还没有任何角色,那么现在在server.js上使用onCreateUser方法。

//Server.js
Accounts.onCreateUser(function(options, user) {
  if (options.profile)
    user.profile = options.profile;
    user.role = "basic"
  return user;
});

现在这更容易,并且代码更少,如果您尝试创建2个不同的角色,如"Admin""Basic",只需在客户端创建一个名为&#34的配置文件字段; profile.roles"并在onCreateUser上执行if语句。

答案 1 :(得分:0)

return Accounts.createUser({email: adminData.email, password : adminData.password, roles: adminData.roles});

此部分在创建后返回userId,它在失败时不会返回任何错误。

失败时,返回的值将是未定义的

此外,在服务器中,我们不能对Accounts.createUser使用回调 如果要查找错误,则必须在客户端使用Accounts.createUser。

答案 2 :(得分:0)

这很晚,但在服务器端,您可以将createUser分配给变量,它将返回新用户的_id;然后您可以检查是否存在。例如(仅限服务器端):

let email = 'foo@bar.com';
let password = 'bar';
let profile = {firstName: 'foo', lastName: 'bar'};
let newId = Accounts.createUser({
    password: password,
    email: email,
    profile: profile
});
if (!newId) {
    // New _id did not get created, reason is likely EMail Already Exists
    throw new Meteor.Error(403, "Cannot create user: " + error.reason);
}
else {
    // Stuff here to do after creating the user
}

Meteor.Error行将作为错误传递回客户端的回调中,因此您可以将该错误反映给浏览器。