2016-04-01 2 views
0

Привет, ребята, новичок в . Sails.js (с использованием ) MySQL) Попробуйте найти, существует ли пользователь перед регистрацией.Sails.js. Проверьте, существует ли пользователь

Вот это код:

register:function(req, res, next){ 
    var params = req.params.all(); 

    User.find({ 
     or : [ 
      { usrnm:params.usrname }, 
      { eml:params.eml } 
     ] 
    }) 
    .exec(function (err, user){ 
     if (err) { 
      return res.negotiate(err); 
     } 
     if (user) { 
      res.status(400); 
      return res.json('User already exists!'); 
     } 
    }); 

    User.create(params, function(err, user){ 
     if(err){ 
      return next(err); 
     } 
     res.status(201); 
     res.json(user); 
    }); 
} 

Проблема заключается в том:

Ответ всегда "пользователя уже существует!" С кодом состояния - 400

  • Если существует с данным именем пользователя и/или электронной почтой, вышеуказанное сообщение отображается независимо, а затем что-то регистрируется в консоли (что я не понимаю), и пользователь не создается, как в моем MySQL, эти два поля уникальны.
  • ** Если пользователь не существует **, пользователь создается за ним, но он все еще отображает вышеприведенное сообщение.

Я хочу, чтобы отобразить сообщение, только если пользователь существует (например, если соответствует данные полномочия), иначе реагируют с 201

+0

Похоже, вы создаете пользователя, даже если они существуют, вам нужно поместить это в блок else после проверки, существует ли у пользователя – JordanHendrix

+0

, тогда код ниже. – JordanHendrix

+0

попробовал поставить часть создания внутри «else», но проблема остается –

ответ

3
register:function(req, res, next){ 
    var params = req.params.all(); 

    User.find({ 
     or : [ 
      { usrnm:params.usrname }, 
      { eml:params.eml } 
     ] 
    }) 
    .exec(function (err, users){ 
     if (err) { 
      return res.negotiate(err); 
     } 
     if (users.length) { 
      res.status(400); 
      return res.json('User already exists!'); 
     } else { 
      User.create(params, function(err, user){ 
       if(err){ 
       return next(err); 
       } else { 
       res.status(201); 
       res.json(user); 
       } 
      }); 
     } 
    }); 
} 

Вы должны вызвать метод создания пользователя, если пользователь с теми, параметров еще не существует, и поэтому он должен быть включен в обратный вызов.

Функция User.find() возвращает массив, поэтому вам нужно проверить его длину, чтобы увидеть, есть ли подходящие объекты.

+0

Нет, новый пользователь не создается, все еще получая одно и то же сообщение, но на этот раз не получая никакого журнала –

+0

, вы получаете сообщение «пользователь существует», даже если пользователь не существует? – war1oc

+0

Да, я получаю сообщение независимо от того, что я получил сообщение, независимо от того, как я получаю сообщение, независимо от того, –

0

Ладно, ребята, я понял, решение, я положу его здесь, в случае, если это поможет кому-то

if (user) { // will be true even if user = [] 
    res.status(400); 
    return res.json('User already exists!'); 
} 

В случае, если пользователь не найден в БД, пользователя является = [] , это означает []! = false , поэтому сообщение в пределах области отображается.

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