在meteorjs中,Account.createUser回调不起作用

时间:2015-06-18 11:54:17

标签: javascript node.js meteor

我正在使用meteor js开发一个应用程序。我创建了一个用于创建用户的流星方法。它告诉我以下错误: -

尚未在服务器上支持回调的Accounts.createUser。

这是我的流星方法

如何在account.createUser中添加回调?

Meteor.startup(function () {
    Meteor.methods({
        postForm:function(doc){
            var result = Accounts.createUser({
                username: doc.username,
                password: doc.password,
                email: doc.emails,
                profile: {
                    lastname: doc.lastname,
                    contact:doc.phoneNumber,
                    bdat:doc.bod,
                    address:doc.address
                }
            },function(){
                console.log('hello');
            });
        }
    });
});

2 个答案:

答案 0 :(得分:7)

"然而"在该错误消息中可能是作者的错误。根据{{​​3}}:

  

在服务器上,[NSManagedObject]返回新创建的用户ID。

这意味着在服务器端,Accounts.createUser本质上是阻塞的:它等待创建用户,然后返回其新生成的id。所以"回调",在这种情况下,基本上是跟随你的Accounts.createUser声明的任何内容。您将获得一个值,即用户的_id,您可以使用该值来检索具有createUser的插入用户。如果你想覆盖错误,你可以捕获抛出的异常。

但正如David Weldon所说,你基本上可以在客户端上使用Meteor.users.find()进行回调,这需要回调。我想如果你想在"回调"中做一些特定于服务器的事情是有意义的。那个创作,但也有人可能会说你可以为此做一个服务器方法调用。 (虽然在这种情况下会调用服务器两次,一次用于创建,一次用于回调逻辑)

答案 1 :(得分:5)

我收到了完全相同的错误消息,包括“尚未”字样。我的完整错误消息:Exception while invoking method Error: Accounts.createUser with callback not supported on the server yet.将该错误消息翻译为

  

嘿,开发人员,你这个大假人,你的方法调用不能同时处理这两个问题   响应和错误通过回调,但。请修改您的代码。

对我来说这个问题有两个问题。和你一样,我没有充分考虑回调错误和响应。这意味着,如果调用链中的其他地方出现错误,该错误将不会传递给您,因此您不知道出了什么问题。首先修复回调代码。

Meteor.methods({
    postForm:function(doc){
        try {
          var result = Accounts.createUser({
              username: doc.username,
              password: doc.password,
              email: doc.emails,
              profile: {
                  lastname: doc.lastname,
                  contact:doc.phoneNumber,
                  bdat:doc.bod,
                  address:doc.address
              }
          });
          if(result){
              // are you using roles?
              // Roles.addUsersToRoles(result, doc.roles);  
              return result;
          }
        }
        catch(err){
            return err;
        }
    }
});

希望这会“修复”callback not supported错误消息。那时你应该能够看到真正引起麻烦的是什么。在我的情况下,这是一个错误的Accounts.validateNewUser((user)例程,我从教程中复制并忘记更新以匹配我的数据。

哦,差点忘了......这是从客户端调用方法的示例代码。

Meteor.call('postForm', newUser, function(error, response) {
    if (error) {
        console.log('postForm: Error: ', error);
    }
    if (response) {
        console.log('postForm: Response: ', response);
    }
});

祝你好运。这里提供的信息,以防任何人收到“尚未”错误!