如何res.render/发送一个重定向后的变量?



我想发送一个消息变量,表示成功或失败,而不使用护照或会话。

当它失败时,我可以这样做:

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>

阅读这篇文章获取更多信息

最新更新