我检查是否收到了电子邮件或用户名。然后我使用flash然后使用flash向客户端发送消息req.flash('messages', 'That username is taken.');
唯一的问题是我无法在函数内调用请求命令。我可以在app.post('/signup', function(req, res) {
之后立即发送消息。如何检查用户名是否可用,然后在确定后发送req.flash命令。我尝试创建一个if语句,但因为在找到用户名并且变量设置为true时异步运行节点,所以调用了if语句。如何在此帖子请求中使用req.flash向客户端发送消息。
app.post('/signup', function(req, res) {
var userDetails = User({
firstname: req.body.firstname,
username: req.body.username,
email: req.body.email,
password: bcrypt.hashSync(req.body.password1, bcrypt.genSaltSync(10))
});
User.findOne({
$or: [ { 'username': req.body.username}, {'email': req.body.email}]
}, function(err, user) {
if (user) {
if(user.username === req.body.username){
console.log('that username is taken');
req.flash('messages', 'that username is taken');
} else {
}
if(user.email === req.body.email){
console.log('that email is already in use');
req.flash('messages', 'that email is already in use');
} else {
}
} else {
userDetails.save(function(err) {
if (err) throw err;
});
console.log('change to login')
}
if (err) {
return done(err);
}
});
res.redirect('/');
});
答案 0 :(得分:1)
如果在更高级别定义req,则在其他函数中调用req应该没有问题。我不确定你的flash是否是会话存储的,如果不存在,那么为什么消息不闪存是你的重定向路由。
您可以重定向到root,而无需等待数据库请求结束。我想如果找到用户,你只会重定向?包括重定向到回调函数。