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

Javascript 如何在node.js中重定向时将数据从express传递到.ejs文件,javascript,node.js,express,Javascript,Node.js,Express,我在login.ejs文件中有一个登录表单,当我在填写信息后单击submit时,我将重定向到页面,如果详细信息正确,否则我想在.ejs中显示密码错误。下面是详细信息 这是我的app.js文件代码-我在这里发送一个json并将无效密码隐藏在.ejs文件中 app.get('/', function (req, res) { res.render("login",{Error:"none"}); }); app.post('/login', function (req, res)

我在login.ejs文件中有一个登录表单,当我在填写信息后单击submit时,我将重定向到页面,如果详细信息正确,否则我想在.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文件

 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'});
}
<!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数据。有什么方法可以做到这一点吗?

如果使用AJAX,则在AJAX调用后不能进行重定向。改用send

res.send({Error:'block'});
根据.redirect方法的表达式:

res.redirect([状态,]路径)

重定向到从具有指定状态的指定路径派生的URL,该URL为与HTTP状态代码对应的正整数。如果未指定,则状态默认为“302”已找到

所以你不能这样称呼它:

res.redirect('/',{Error:'block'});
即使该方法有效,它也只会重定向到
'/'
,这将触发
app.get('/',function(req,res){…}
端点,并显示初始登录页面,同时隐藏错误消息

我相信,将app.post('/login',function(req,res){…}中的最后一行更改为

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

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

  • 您可以使用
    encodeURIComponent

    app.get('/user',function(req,res){
    var error=encodeURIComponent('error');
    res.redirect('/?user='+错误);
    });
  • 另一种方法是在会话中使用某些内容。
    请求会话['error']=“error”
    请求重定向('/');
  • 您还可以使用
    express flash
    闪烁页面上的任何错误

  • 您的意思是
    错误
    没有在您的
    登录名中传递和显示。ejs
    ?非常感谢您的帮助:)非常感谢您的帮助:)