【发布时间】:2017-06-21 22:07:56
【问题描述】:
我正在使用 NodeJS 和护照让用户创建一个帐户,然后才能看到他们刚刚参加的测验的结果。我的挑战是我需要在页面刷新之前确认用户名可用,因为如果发生这种情况,用户将丢失他们的结果。
再次:我需要在刷新之前验证用户名未被占用。
我想我已经接近了,但它不起作用。我将如何更改我的代码来应对这一挑战?
目前,如果使用用户名,它会在尝试创建帐户时返回错误,并且用户最终会进入 /failpage,如下所示。
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');
});
});
});
【问题讨论】:
-
需要在回调中运行
-
感谢@SLaks。在 user.save 回调中?
-
请格式化您的代码以使其可读。如果您让我们更容易阅读/理解您的代码,您更有可能获得帮助。
-
另外,当名称已经存在于数据库中时,您希望发生什么?您要发送什么类型的响应。你不能在你的服务器上做
alert()。 -
我想在屏幕上通知用户,让他们在不刷新页面的情况下重试。
标签: node.js mongodb express authentication passport.js