2015-06-18 2 views
4

Я разрабатываю приложение с метеоритом js. Я создал один метеорный метод для создания пользователя. Он показывает мне следующую ошибку: -Account.createUser call back не работает в meteorjs

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


}); 
+0

Почему бы просто не называть 'Accounts.createUser' непосредственно на клиенте, чтобы иметь обратный вызов? Единственная причина, по которой я могу думать о том, чтобы применить это к методу, заключается в том, что пользователь не выполняет автоматический вход. Большой недостаток заключается в том, что вы передаете пароль пользователя на сервер. –

+0

Я использую autoform для создания нового пользователя. Я не могу создать hook для этой формы. Это показывает, что ошибка крючков не определена. Итак, я создал метод метеоритов. – kishan

+0

Я думаю, вы должны переформулировать свой вопрос, чтобы сосредоточиться на проблеме автоформ, поскольку это, по-видимому, актуальная проблема, которая должна быть решена. –

ответ

7

«Еще» в этом сообщении об ошибке скорее всего является ошибкой со стороны автора. В соответствии с the documentation:

On the server, [ Accounts.createUser ] returns the newly created user id.

Это означает, что на стороне сервера, Accounts.createUser, по существу, блокирует: он ожидает пользователь должен быть создан, а затем возвращает его вновь сгенерированный идентификатор. Таким образом, «обратный вызов», в этом случае, является в основном тем, что следует за вашим заявлением createUser. Вы получаете одно значение, _id пользователя, которое вы можете использовать для извлечения вставленного пользователя с помощью Meteor.users.find(). И вы можете поймать заброшенные исключения, если вы хотите покрыть ошибки.

Но, как сказал Дэвид Уэлдон, вы могли бы это сделать, используя Accounts.createUser() на клиенте, который выполняет обратный вызов. Я предполагаю, что имеет смысл, если вы хотите сделать что-то специфичное для сервера в «обратном вызове» этого создания, но можно также утверждать, что вы можете сделать вызов метода сервера только для этого. (хотя он дважды вызывал сервер в этом случае, один раз для создания и один раз для логики обратного вызова)

4

Я получил точно такое же сообщение об ошибке, включая слово «еще». Мое полное сообщение об ошибке: Exception while invoking method Error: Accounts.createUser with callback not supported on the server yet. Перевести это сообщение об ошибке, как

Hey, Developer, you big dummy, your method call doesn't handle both response and error via callbacks, yet. Please fix your code.

вопроса для меня было два раза. Как и вы, я не смог адекватно объяснить ошибку обратного вызова и ответ. Это означает, что если в цепочке вызовов есть ошибка где-то еще, эта ошибка НЕ ​​будет передана вам, поэтому вы не знаете, что случилось. Сначала исправьте код обратного вызова.

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

Удачи вам в этом. Информация здесь предлагается в случае, если кто-то получит ошибку «еще»!

+0

Удивительный ответ, также следует отметить: D –

+0

Это сработало для меня. Отличный ответ! – Abk

Смежные вопросы