我对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} );
答案 0 :(得分:0)
在渲染模板(使用 EJS , Handlebars , Jade 等)以及数据上下文时,您还需要指定其中您希望将存储在数据上下文中的信息嵌入模板中。
在您的情况下,您正在渲染模板:
response.render('pages/dashboard', {
email: email
});
对象{email: email}
是模板的数据上下文。
现在,在模板文件中,您希望能够显示数据上下文中的email
属性。
以下是如何做到这一点:
<%= email %>
标记<%= email %>
在EJS中用于将数据上下文中的email
信息嵌入到模板中。
因此,您需要在pages/dashboard
模板中使用此标记才能显示电子邮件。
查看docs中有关EJS标记的更多信息。