我使用 NodeJS 和 Passport 让用户先创建一个帐户,然后才能看到他们刚刚参加的测验的结果。我的挑战是我需要在页面刷新之前确认用户名可用,因为如果发生这种情况,用户将丢失其结果。
再次:我需要验证刷新之前没有使用用户名。
我想我已经很接近了,但它不起作用。我将如何更改我的代码来应对这一挑战?
目前,如果用户名被占用,则会在尝试创建帐户时返回错误,并且用户最终会出现在/fail 页面上,如下所示。
app.post('/quiz', usernameToLowerCase, emailToLowerCase, function(req, res) {
User.findOne({
username: req.body.username
}, function(err, user) {
if (err) {
alert(err)
if (user) {
alert('this username is already taken. Please choose another.')
console.log('there was a user');
return false;
}
}
});
var user = new User({
username: req.body.username,
email: req.body.email,
password: req.body.password,
})
user.save(function(err) {
console.log('this is the problem' + ' ' + err)
if (err) {
return res.redirect('/failpage')
}
req.logIn(user, function(err) {
if (err) {
console.log(err);
}
console.log('all looks good')
res.redirect('/results');
});
});
});
最佳答案
如果其他人尝试做同样的事情,可以用这个解决:
在 app.js 中
app.get('/usercheck', function(req, res) {
User.findOne({username: req.query.username}, function(err, user){
if(err) {
console.log(err);
}
var message;
if(user) {
console.log(user)
message = "user exists";
console.log(message)
} else {
message= "user doesn't exist";
console.log(message)
}
res.json({message: message});
});
});
在js中
$('#usercheck').on('change', function() {
$.get('/usercheck?username='+$('#usernameValue').val().toLowerCase(), function(response) {
$('#usernameResponseHidden').text(response.message)
if ($('#usernameResponseHidden').html() === "user exists"){
$('#usernameResponse').text('That username is taken. Please pick another')
}
关于Node.js - 检查用户是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44687044/