Sails.js。检查用户是否存在

时间:2016-04-01 17:10:07

标签: javascript mysql node.js sails.js

大家好,我是 Sails.js 的新手(使用 MySQL ) 我试图在注册之前找出用户是否已经存在。

这是代码:

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

响应

2 个答案:

答案 0 :(得分: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);
              }
           });
        }
    });
}

如果具有这些参数的用户尚不存在,则应调用create user方法,因此应将其置于回调中。

User.find()函数返回一个数组,因此您需要检查其长度以查看是否有任何匹配的对象。

答案 1 :(得分:0)

好的家伙我想出了一个解决方案,我会把它放在这里,万一它可以帮助某人

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

如果在数据库中找不到用户,用户 = [] ,则表示 []!= false  因此,范围内的消息将被显示。