16

我有一个登录表单/login,将登录信息发布到/checklogin. 如果凭据不正确,我想将用户重定向到/login“用户名或密码不正确”的错误消息。但是,我似乎无法弄清楚如何res.redirect像您使用res.render.

这样做的最佳方法是什么?我看到了一个关于这个问题的先前问题,但它似乎在 Express 的更高版本中不起作用。

4

2 回答 2

23

仅使用重定向,实际上不可能传递查询字符串以外的选项:

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而不是捆绑在一起一样。

于 2013-11-05T20:40:50.120 回答
3

服务器端:

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>
于 2019-06-26T16:07:08.137 回答