我有一个登录表单/login
,将登录信息发布到/checklogin
. 如果凭据不正确,我想将用户重定向到/login
“用户名或密码不正确”的错误消息。但是,我似乎无法弄清楚如何res.redirect
像您使用res.render
.
这样做的最佳方法是什么?我看到了一个关于这个问题的先前问题,但它似乎在 Express 的更高版本中不起作用。
仅使用重定向,实际上不可能传递查询字符串以外的选项:
res.redirect('/login?e=' + encodeURIComponent('Incorrect username or password'));
重定向指示客户端启动新请求,并且 HTTP 本身是无状态的。
要以其他方式保留消息,您将需要一种持久性形式来为下一个请求保留它——cookie、会话等。
req.session.error = 'Incorrect username or password';
res.redirect('/login');
然后:
res.render('login', { error: req.session.error });
delete res.session.error; // remove from further requests
这也是 Express 2req.flash()
帮助完成的。而且,它的一个变体仍然可用于 Express 3 及更高版本——就像connect-flash
而不是捆绑在一起一样。
服务器端:
res.redirect('/login?error=' + encodeURIComponent('Incorrect_Credential'));
在视图中会有一个警报(希望你们正在使用引导程序)。但最初它将是隐藏的。如果出现错误,将显示。
<div class="alert alert-success" role="alert" id="loginAlert">
<p style="text-align: center;">Incorrect Credential</p>
</div>
展示技巧:
<script>
$('#loginAlert').hide();
const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('error');
if(myParam == "Incorrect_Credential") {
$('#loginAlert').show();
}
</script>