我正在使用 Node.js Express 来构建我的应用程序。我使用护照作为我的身份验证系统。
我是一名 Python 开发人员,所以我对 JS 很陌生。如何更改我的代码,以便如果用户存在,它会在当前屏幕上弹出消息“用户已存在”?
当前它清除页面并仅显示“用户已存在”
passport.use('signup-local', new LocalStrategy({
usernameField: "email",
passwordField: "password"
}, function(email, password, next) {
User.findOne({
email: email
}, function(err, user) {
if (err) return next(err);
if (user) return next({message: "User already exists"});
let newUser = new User({
email: email,
passwordHash: bcrypt.hashSync(password, 10)
})
newUser.save(function(err) {
next(err, newUser);
});
});
}));
app.post('/signup',
passport.authenticate('signup-local', { failureRedirect: '/' }),
function(req, res) {
res.redirect('/');
});
错误出在
User.findOne
函数的回调函数中。您需要将已传递的参数反转为相同的参数,即来自此:
User.findOne({
email: email
}, function(err, user) { <===
if (err) return next(err);
对此:
User.findOne({
email: email
}, function(user, err) { <== correct
if (err) return next(err);