检查现有用户是否继续

时间:2015-06-14 09:16:18

标签: mongodb sails.js waterline

作为水线的unique属性is ignored for MongoDB,我决定在我的代码中检查现有的模型条目:

    var username = req.param('username');
    var email = req.param('email');
    var asd = "";
        // Do check if user already exists
        User.findOne({username: username}, function (err, user) {
            asd = "invalid USERNAME";
            console.log(asd);
            if(err){
                return res.serverError('error creating user' + err);
            }
            if(user){
                asd = "invalid USERNAME";
                console.log(asd);
                return res.json({status: "INVALID_USERNAME"});
            }
        });
        User.findOne({email: email}, function (err, user) {
            asd = "invalid EMAIL";
            console.log(asd);
            if(err){
                return res.serverError('error creating user' + err);
            }
            if(user){
                asd = "invalid EMAIL";
                console.log(asd);
                res.json({status: "INVALID_EMAIL"});
            }
        });

        // Create the user
        User.create({.....});

尽管如此,我仍然没有使用findOne方法,即使具有提供的凭据的用户确实存在于数据库中。我试过调试,但我没有参与声明。我甚至把这个asd变量,只是为了检查smth是否发生,但没有成功。并且使用相同的凭据一次又一次地创建用户。

对于我缺少什么的任何想法?

1 个答案:

答案 0 :(得分:2)

您需要将回车放入回调

User.findOne(...).exec(
   function(err,user){
      if(!user) User.create(...)
});

但正如其他人所评论的那样,可能不需要这种解决方法。在您链接的问题中,他们解释说它只发生在

migrate: safe

设置config / models.js或在命令行界面中选择。 所以只需将其设置为其他内容即可。如果您愿意,只需设置一次,运行风帆升降并将其更改为安全即可。