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认为他们做不到,但显然不是这样。所以不需要编写代码来“解决”这个问题。我认为这是更好的建议。