post 请求中 req.flash 的问题
Issues with req.flash within a post request
我检查电子邮件或用户名是否被占用。然后我使用 then use flash 使用 req.flash('messages', 'That username is taken.');
向客户端发送消息。唯一的问题是我无法在函数内调用请求命令。我可以在 app.post('/signup', function(req, res) {
之后立即发送消息 如何检查用户名是否被占用,然后在确定后发送 req.flash 命令。我试图创建一个 if 语句,但是因为在找到用户名并且变量设置为 true 时节点是 运行 异步的,所以已经调用了 if 语句。我如何使用 req.flash 在此 post 请求中向客户端发送消息。
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('/');
});
如果req定义在更高层次,在其他函数中调用req应该没有问题。我不确定你的 flash 是否是会话存储的,如果不是,那么消息不是 flash 的原因是你重定向到路由。
您没有等到数据库请求结束就重定向到根目录。我认为您只会在找到用户时重定向?包括您对回调函数的重定向。
我检查电子邮件或用户名是否被占用。然后我使用 then use flash 使用 req.flash('messages', 'That username is taken.');
向客户端发送消息。唯一的问题是我无法在函数内调用请求命令。我可以在 app.post('/signup', function(req, res) {
之后立即发送消息 如何检查用户名是否被占用,然后在确定后发送 req.flash 命令。我试图创建一个 if 语句,但是因为在找到用户名并且变量设置为 true 时节点是 运行 异步的,所以已经调用了 if 语句。我如何使用 req.flash 在此 post 请求中向客户端发送消息。
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('/');
});
如果req定义在更高层次,在其他函数中调用req应该没有问题。我不确定你的 flash 是否是会话存储的,如果不是,那么消息不是 flash 的原因是你重定向到路由。
您没有等到数据库请求结束就重定向到根目录。我认为您只会在找到用户时重定向?包括您对回调函数的重定向。