为什么我不能使用Nodejs和Express将数据从POST发送到下一个呈现页面上的表单?

时间:2016-05-14 15:30:07

标签: node.js post express get

我对Nodejs很陌生 - 我在尝试成功登录后,尝试将用户的电子邮件传递到下一页上的表单。登录验证很好,但是当它加载下一页时,电子邮件所在的输入仍然是空白的。

我检查了我的控制台日志,我的电子邮件字符串是明确定义的。 我错过了什么?

dashboard.ejs

<!DOCTYPE html>
<html>
<head>
  <% include ../partials/header.ejs %>
</head>
<body>
<% include ../partials/nav.ejs %>

<div class = "jumbotron">

    <h1>Dashboard</h1>
    <h2>Profile</h2>
    <form action="login" method="get">
            Email: <input class="readonly" input type="text" name="email" readonly>
    </form>

 <div>
</body>
</html>

index.js

// Login Authentication
app.post('/login', function(request, response) {
    var email = request.body.email;
    var password = request.body.password;

    console.log("post received: %s %s", email, password);

    var query = 'SELECT * FROM Users WHERE email = \'' + email + '\'' + 'AND password = \'' + password + '\'';

    pg.connect(process.env.DATABASE_URL, function(err, client, done) {
        client.query(query, function(err, result) {
            done();

            var numRows = result.rows.length;
            console.log("Row count: %d", result.rows.length)
            if (err) {
                console.error(err);
                response.send("Error: Could not execute query" + err);
            } else {
                if (numRows == 0) {
                    response.render('pages/loginerrorindex');
                } else {
                    request.session.user = email;
                    request.session.admin = true;
                    console.log("Sending email to dash: %s", email);
                    response.render('pages/dashboard', { email: email });
                }
            }
        });
    });
});

我认为上面代码中的以下行可行,但它似乎没有将信息传递给表单

 response.render('pages/dashboard', {email: email} );

1 个答案:

答案 0 :(得分:0)

在渲染模板(使用 EJS Handlebars Jade 等)以及数据上下文时,您还需要指定其中您希望将存储在数据上下文中的信息嵌入模板中。

在您的情况下,您正在渲染模板:

response.render('pages/dashboard', {
    email: email
});

对象{email: email}是模板的数据上下文。

现在,在模板文件中,您希望能够显示数据上下文中的email属性。

以下是如何做到这一点:

<%= email %>

标记<%= email %>在EJS中用于将数据上下文中的email信息嵌入到模板中。

因此,您需要在pages/dashboard模板中使用此标记才能显示电子邮件。

查看docs中有关EJS标记的更多信息。