我在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;
}
});
答案 0 :(得分:1)
由于您正在创建静态rol "basic"
,因此您不需要执行methods
和Meteor.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行将作为错误传递回客户端的回调中,因此您可以将该错误反映给浏览器。