作为水线的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是否发生,但没有成功。并且使用相同的凭据一次又一次地创建用户。
对于我缺少什么的任何想法?
答案 0 :(得分:2)
您需要将回车放入回调
User.findOne(...).exec(
function(err,user){
if(!user) User.create(...)
});
但正如其他人所评论的那样,可能不需要这种解决方法。在您链接的问题中,他们解释说它只发生在
migrate: safe
设置config / models.js或在命令行界面中选择。 所以只需将其设置为其他内容即可。如果您愿意,只需设置一次,运行风帆升降并将其更改为安全即可。