如何在Node.js中重定向时将数据从Express传递到.ejs文件

3

我在login.ejs文件中有一个登陆表单,当我填写完信息后点击提交,如果信息正确会重定向到另一个页面,否则我想在.ejs文件中显示密码错误的提示。以下是详细信息:

这是我的app.js文件代码- 在这里我发送了一个json并隐藏了.ejs文件中的无效密码

 app.get('/', function (req, res) {

     res.render("login",{Error:"none"});

});

app.post('/login', function (req, res) {

    var username = req.body.username;
    var password = req.body.password;
     //Here will be my code to check detail wrong or right
     res.redirect('/',{Error:'block'});
}

这是我登录页面的 login.ejs 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="css/style.css" type="text/css" />
    <link rel="stylesheet" href="css/font.css" type="text/css" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

</head>

<body>
    <div class="Error" id="error" style="display:<%=Error%>;">Invalid email/phone or password</div>
    <div class="Body">
        <form class="LogBox" action="/login" method="post">
            <div class="Head">Log In</div>
                <input type="text" placeholder="Email or Phone" class="inputfrontbutton" name="username">
                <input type="password" placeholder="Password"  class="inputfrontbutton" name="password">
                <input type="submit" value="Log In" class="frontsubmit">
        </form>
    </div>
</body>

</html>

但是我无法在重定向中发送JSON数据。有没有办法可以做到这一点?


你的意思是 Error 没有被传递并显示在你的 login.ejs 中吗? - David R
3个回答

3
根据Express文档中的.redirect方法:(链接)

res.redirect([status,] path)

重定向到指定路径派生的URL,可以指定状态码(status),为HTTP状态码的正整数。如果不指定状态码,默认为302“Found”。

因此,您不能这样调用:
res.redirect('/',{Error:'block'});

即使该方法有效,它也只会重定向到'/',这将触发app.get('/', function (req, res) {...}端点并显示初始登录页面,错误消息被隐藏。
我认为,最好的方法是将app.post('/login', function (req, res) {...}中的最后一行改为:
res.render("login",{Error:"block"});

0

您可以使用res.render方法传递json,但是要使用res.redirect,您可以使用以下方法。

  1. 您可以使用encodeURIComponent
    app.get('/user', function(req, res) { var error = encodeURIComponent('error'); res.redirect('/?user=' + error); });
  2. 另一种方法是在会话中使用某些内容。设置会话的链接
    req.session['error'] = "错误";
    req.redirect('/');
  3. 您还可以使用express-flash在页面上闪存任何错误express-flash的基本示例和用法

非常感谢您的帮助 :) - Nitesh Sharma

0

如果您正在使用 AJAX,则无法在 AJAX 调用后进行重定向。请改用 send。

res.send({Error:'block'});

非常感谢您的帮助 :) - Nitesh Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接