Ejs 呈现的变量未定义
Ejs rendered vars are undefined
我正在使用 ejs 模板用 nodejs 和 express 编写我的第一个 webb ap。
现在,当我渲染 html 文件时,一切正常,但是当我尝试使用参数渲染文件时,渲染的 ejs 模板似乎找不到我发送给它的参数。
这是我的文件结构:
project/
Views/
index.ejs
login.ejs
public/
all the css files ..
node_modules/
server.js
这是我的 server.js :
var express = require('express');
var app = express();
const cookieParser = require('cookie-parser');
const session = require('express-session');
const bodyParser = require('body-parser')
app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/Public'));
app.use(cookieParser());
app.use(session({secret: '1234567890QWERTY',resave: false, saveUninitialized: false})); // change the secret to safer one
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.get('/', function(req, res) {
if (req.session.user == undefined) {
// if user is not logged-in redirect back to login page //
res.render('login');
} else {
console.log(req.session.user);
res.render('index', {username:req.session.user});
}
});
app.get('/login', function(req, res) {
res.render('login');
});
app.listen(8080);
console.log('port: 8080');
这是我的 index.ejs 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../favicon.ico">
<title>Dashboard</title>
</head>
<body>
<div><%= username %></div>
</body>
</html>
出于某种原因,每当我尝试访问 index.ejs 时,它都会返回一个错误 -
"username is not defined"
知道我做错了什么吗?网上的例子看起来完全一样
谢谢!
在 Fadi Bitar 回答后,我的服务器获取事件是这样的,但仍然无法正常工作:
app.get('/', function(req, res) {
if (req.session.user == undefined) {
// if user is not logged-in redirect back to login page //
res.render('login',{username:req.session.user});
} else {
console.log(req.session.user);
res.render('index', {username:req.session.user});
}
});
// about page
app.get('/login', function(req, res) {
res.render('login',{username:req.session.user});
});
我相信您在 get 函数中缺少 "username" 变量。
确保你做到了:
res.render('/', {用户名: "example username"});
在初始代码中,它应该可以工作...没有看到我的猜测是您正试图在 login.ejs 中回显 <%=username%>
。
您更新后的代码有几点使用了不存在的变量。
if (req.session.user == undefined) {
res.render('login',{username:req.session.user});
}
这里你说的是 'if req.session.user is undefined, set username to req.session.user'(未定义)。
那么这个位也是一样的..
app.get('/login', function(req, res) {
res.render('login',{username:req.session.user});
});
我在这里假设当你去 /login req.session.user 没有设置,所以这就是错误的原因......
我正在使用 ejs 模板用 nodejs 和 express 编写我的第一个 webb ap。 现在,当我渲染 html 文件时,一切正常,但是当我尝试使用参数渲染文件时,渲染的 ejs 模板似乎找不到我发送给它的参数。
这是我的文件结构:
project/
Views/
index.ejs
login.ejs
public/
all the css files ..
node_modules/
server.js
这是我的 server.js :
var express = require('express');
var app = express();
const cookieParser = require('cookie-parser');
const session = require('express-session');
const bodyParser = require('body-parser')
app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/Public'));
app.use(cookieParser());
app.use(session({secret: '1234567890QWERTY',resave: false, saveUninitialized: false})); // change the secret to safer one
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.get('/', function(req, res) {
if (req.session.user == undefined) {
// if user is not logged-in redirect back to login page //
res.render('login');
} else {
console.log(req.session.user);
res.render('index', {username:req.session.user});
}
});
app.get('/login', function(req, res) {
res.render('login');
});
app.listen(8080);
console.log('port: 8080');
这是我的 index.ejs 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../favicon.ico">
<title>Dashboard</title>
</head>
<body>
<div><%= username %></div>
</body>
</html>
出于某种原因,每当我尝试访问 index.ejs 时,它都会返回一个错误 - "username is not defined"
知道我做错了什么吗?网上的例子看起来完全一样
谢谢!
在 Fadi Bitar 回答后,我的服务器获取事件是这样的,但仍然无法正常工作:
app.get('/', function(req, res) {
if (req.session.user == undefined) {
// if user is not logged-in redirect back to login page //
res.render('login',{username:req.session.user});
} else {
console.log(req.session.user);
res.render('index', {username:req.session.user});
}
});
// about page
app.get('/login', function(req, res) {
res.render('login',{username:req.session.user});
});
我相信您在 get 函数中缺少 "username" 变量。
确保你做到了: res.render('/', {用户名: "example username"});
在初始代码中,它应该可以工作...没有看到我的猜测是您正试图在 login.ejs 中回显 <%=username%>
。
您更新后的代码有几点使用了不存在的变量。
if (req.session.user == undefined) {
res.render('login',{username:req.session.user});
}
这里你说的是 'if req.session.user is undefined, set username to req.session.user'(未定义)。
那么这个位也是一样的..
app.get('/login', function(req, res) {
res.render('login',{username:req.session.user});
});
我在这里假设当你去 /login req.session.user 没有设置,所以这就是错误的原因......