我在註冊時有一個用戶名字段和一個電子郵件字段,我想在將用戶添加到數據庫之前檢查它們是否存在。大多數護照示例只查找一個字段,如用戶名,我不知道如何查找2.如果我按照我的要求做了以下操作,並且用戶輸入了現有的用戶名,但是不存在的電子郵件,則會通過該用戶,如果用戶輸入一個現有的電子郵件,但它會通過一個不存在的用戶名,因爲他們沒有用戶名。在數據庫中查詢護照配置中的兩個字段
我知道這是爲什麼發生。我只是無法弄清楚如何將2個查詢放在一起,所以只有當它看到沒有用戶名和/或沒有電子郵件時才保存它。更清楚的是,不應該有用戶名和電子郵件的重複。
我在想也許在else語句中設置一個變量,說可以保存用戶,然後在代碼中檢查是否有2個這些變量,如果有這些變量然後保存但我不不知道該怎麼做。我認爲這很難,因爲查詢是異步的。我希望我能做到這一點。
以及我將如何處理連接閃光消息?
passport.use("local-signup", new LocalStrategy({
usernameField : "email",
passwordField : "password",
passReqToCallback : true
},
function(req, email, password, done){
User.findOne({"email" : email}, function(err, user){
if(err) return done(err);
if(user){
return done(null, false, req.flash("signupMessage", "That email is already taken"))
}else{
var newUser = new User();
newUser.username = req.body.username;
newUser.password = password;
newUser.email = req.body.email;
newUser.save(function(err, doc){
if(err) throw err;
console.log("doc", " " , doc)
return done(null, newUser);
})
}
})
console.log("username " + req.body.username)
User.findOne({"username" : req.body.username}, function(err, user){
if(err) return done(err);
if(user){
return done(null, false, req.flash("signupMessage", "that username is taken"))
}else{
var newUser = new User();
newUser.username = req.body.username;
newUser.password = password;
newUser.email = req.body.email;
newUser.save(function(err, doc){
if(err) throw err;
console.log("doc", " " , doc)
return done(null, newUser);
})
}
})
}
))
@jack空白不幸的是我無法測試上面的代碼因爲它只針對你的項目。請讓我知道它是否適合你。很高興再次看到。 –
謝謝你的幫助和意見。它似乎工作,但我現在有問題發送2個Flash消息。在提供的鏈接中查看問題。我將不勝感激您繼續help.http://stackoverflow.com/questions/38597793/sending-2-flash-messages-when-to-queries-to-databse-show-that-fields-exist-in-pa –
@針對其他問題添加了jackblank答案。 –