Mongodb 检查现有用户不存在';我不同意

Mongodb 检查现有用户不存在';我不同意,mongodb,sails.js,waterline,Mongodb,Sails.js,Waterline,作为水线的唯一属性,我决定检查代码中的现有模型条目: 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) {

作为水线的
唯一属性
,我决定检查代码中的现有模型条目:

    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是否发生,但没有成功。并且用户不断地被创建,具有相同的凭据


有没有关于我遗漏了什么的想法?

您需要将create放在回调中

User.findOne(...).exec(
   function(err,user){
      if(!user) User.create(...)
});
但正如其他人所评论的,可能不需要这种变通方法。在你链接的问题中,他们解释了它只发生在

migrate: safe
设置config/models.js或在命令行界面中选择。
所以把它设为其他的。只要设置一次就足够了,运行“扬帆”并将其更改回安全状态(如果您愿意)

您可以使用“电子邮件”作为
\u id
值吗?如果sails不允许您使用自己的主键选择,这似乎有点愚蠢。而且您似乎没有充分阅读问题报告。这里有一个关于错误的解释:好吧,也许需要做一些事情来修复发布的代码。但实际上,使用“唯一”索引并没有错,OP认为他们做不到,但显然不是这样。所以不需要编写代码来“解决”这个问题。我认为这是更好的建议。