我想发送一个消息变量,表示成功或失败,而不使用护照或会话。
当它失败时,我可以这样做:
res.status(401).render('register', {
message: 'Your username/email or password is incorrect.'
})
所以我认为这是可能的:
res.redirect('/');
res.render('', { message: 'Login success.'});
但事实并非如此:
Error: Cannot set headers after they are sent to the client
有简单的解决方法吗?
我试着做一个路由器。get('/message/redirect:route'),但我意识到我也遇到了同样的问题。
您正在渲染前重定向。所以渲染方法不能发送报头,因为你已经重定向了它们。您需要调用重定向或渲染,而不是同时调用两者。你可以这样做。
res.render('/', { message: 'Login success.'});
删除这一行
res.redirect('/');
在EJS文件中,只需调用<%= message %>
来访问消息。有一种更好的方法来处理确认/错误消息。使用Flash .npm install express-flash
然后在渲染之前,调用flash。Flash接受两个参数,消息的名称和消息本身,如下所示
req.flash("MessageName", "Login success");
res.redirect(pathName);
务必使用flash
const flash = require('express-flash');
app = express();
app.use(flash());
app.use((req, res, next) => {
res.locals.MessageName= req.flash("MessageName");
next();
});
要访问EJS文件中的消息,只需调用<%= MessageName %>
这是我的代码样本:在服务器文件中:
req.flash("error", "Something went wrong");
res.redirect('back');
在EJS文件中:
<div class="flash">
<% if(error && error.length > 0){ %>
<div class="flash_error">
<h1 class="flash_error--text"><%= error %></h1>
</div>
<% } %>
</div>
阅读这篇文章获取更多信息