如何在重定向后 res.render/send 一个变量?
How to res.render/send a variable after a redirect?
我想发送一个消息变量,在不使用通行证或会话的情况下表示成功或失败。
当它失败时,我可以这样做:
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
有没有简单的解决办法?
我尝试制作 router.get('/message/redirect :route') 但我意识到我 运行 也遇到了同样的问题。
您正在渲染之前重定向。所以 render 方法不能发送 headers 因为你已经重定向了它们。您需要调用重定向或渲染,而不是同时调用。你可以这样做。
res.render('/', { message: 'Login success.'});
删除此行
res.redirect('/');
在您的 EJS 文件中,只需调用 <%= message %>
即可访问消息。有一种更好的方法来处理 confirmation/error 消息。使用 Flash。
npm install express-flash
然后在渲染之前调用flash。 Flash 有两个参数,消息的名称和消息本身,就像这样
req.flash("MessageName", "Login success");
res.redirect(pathName);
确保使用闪光灯
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>
我想发送一个消息变量,在不使用通行证或会话的情况下表示成功或失败。
当它失败时,我可以这样做:
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
有没有简单的解决办法?
我尝试制作 router.get('/message/redirect :route') 但我意识到我 运行 也遇到了同样的问题。
您正在渲染之前重定向。所以 render 方法不能发送 headers 因为你已经重定向了它们。您需要调用重定向或渲染,而不是同时调用。你可以这样做。
res.render('/', { message: 'Login success.'});
删除此行
res.redirect('/');
在您的 EJS 文件中,只需调用 <%= message %>
即可访问消息。有一种更好的方法来处理 confirmation/error 消息。使用 Flash。
npm install express-flash
然后在渲染之前调用flash。 Flash 有两个参数,消息的名称和消息本身,就像这样
req.flash("MessageName", "Login success");
res.redirect(pathName);
确保使用闪光灯
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>