2014-12-17 2 views
0

Я пишу приложение, использующее Метеор. В этом приложении я хочу реализовать проверку данных на стороне сервера с помощью Accounts.onCreateUser. Проходят некоторые данные, которые могут быть проверены только на стороне сервера.Как проверить данные в onCreateUser без потери данных формы?

На стороне клиента я называю:

Template.register.events({ 
    'submit form': function (e) { 
     e.preventDefault(); 
     var attributes = { 
      username: $("#inputUsername").val(), 
      password: $("#inputPassword").val(), 
      confirmation: $("inputConfirmation").val(), 
      email: $("#inputEmail").val(), 
      ... 
     }; 

     Accounts.createUser(attributes, function(err){ 
      if (err) { 
       throwError(err); 
      } else { 
      } 
     }); 
    } 
}); 

А на стороне сервера:

Accounts.onCreateUser(function(options, user) { 
    if(!verifyData(options)) 
     throw new Meteor.Error(403, "Wrong input"); 
    return user; 
}); 

После проверки на стороне сервера не удается, все формы данные теряются. Каков наилучший способ хранения данных?

+0

В чем причина внедрения проверки на стороне сервера? Если вы не сделаете ничего, что невозможно на клиенте, я бы настоятельно рекомендовал просто проверить на стороне клиента. Могли бы вы, возможно, еще подробнее рассказать о том, что вы хотите делать с данными, как только проверка не пройдет? – JKaan

+0

Примером может быть captcha, который должен быть проверен сервером или данными, которые должны быть проверены в базе данных. Когда проверка не проходит, значения полей ввода должны быть все еще там. – MarcS82

+0

Что происходит внутри вашей функции throwError? – sbking

ответ

1

Я пошел дальше и воспроизвел ваш код на Meteorpad, и из того, что я могу сказать, данные формы все еще сохраняются. Вам просто нужно получить к нему доступ через переменную attributes на стороне клиента.

Возможно, что-то мне не хватает, но я взял то, что вы разместили выше, и положил его туда.

+2

Thank. Ваш код на Meteorpad показывает, что все работает так, как ожидалось. Я сделал ошибку, используя железо: маршрутизатор, который вызвал перезагрузку. – MarcS82

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