在authControllers.js内部,我重定向到/ signup页面以及错误消息
const err = validationResult(req);
//find errors and convert to array
const reqErrors = err.array();
const errors = reqErrors.filter(e => e.msg !== 'Invalid value');
let messages = [];
//loops through erros and push them into messages array
errors.forEach((error) => {
messages.push(error.msg);
});
//check if we have error or not
** if (messages.length > 0) {
// Store error into flash , so we display it later
req.flash('error', messages);
res.redirect('/signup');
}else{**
//move further
return next();
}
}
内部userRoutes.js
userRouter.get('/',(req, res)=>{
console.log("hello from get route")
console.log(req.flash())
const errors = req.flash('error')
console.log(errors.length)
return res.render('signup',
{
title:"Chatting room Log in",
messages: errors,
// if error array > 0 then we have an error need to display
flag :errors.length > 0
}
);
});
当我运行程序时,这是console.log(req.flash())的输出:
{错误: ['用户名是必填项,必须至少5个字符。,, “电子邮件无效”, “密码是必填项,必须至少5个字符。” ]}
但是,变量errors是一个空数组,因此当我尝试输出errors.length时。我得到0。应该给我长度3。
感谢您的帮助!我正在使用connect-flash,passport.js和express.js。
答案 0 :(得分:0)
Flash中间件只有一次读取。当您在读取console.log()时,flash将在显示后删除所有消息。 因此,删除您的console.log并再次运行