【问题标题】:Ejs rendered vars are undefinedEjs 呈现的变量未定义
【发布时间】:2016-10-25 16:33:45
【问题描述】:

我正在使用 ejs 模板使用 nodejs 和 express 编写我的第一个 webb 应用程序。 现在,当我渲染 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 时,它都会返回一个错误 - “未定义用户名”

知道我做错了什么吗?网上的例子看起来一模一样

谢谢!

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});
});

【问题讨论】:

  • 看起来不错?您尝试使用字符串只是为了检查 render 调用是否存在问题,如 res.render('index', {username:'Elion'});
  • 是的,还尝试将字符串放入 var 并将 var 发送到渲染器,如下所示:var bla = "text"; res.render('index', {username:bla});

标签: node.js express ejs


【解决方案1】:

在初始代码中,它应该可以工作...没有看到它,我的猜测是您试图在 login.ejs 中回显&lt;%=username%&gt;

您更新后的代码有几个地方使用了不存在的变量。

if (req.session.user == undefined) {
    res.render('login',{username:req.session.user});
}

这里你说'如果 req.session.user 未定义,将用户名设置为 req.session.user'(未定义)。

那么这个位也一样..

app.get('/login', function(req, res) {
    res.render('login',{username:req.session.user});
});

我在这里假设当你去 /login req.session.user 时没有设置,所以这就是错误的原因......

【讨论】:

    【解决方案2】:

    我相信您在 get 函数中缺少“用户名”变量。

    确保您这样做: res.render('/', {username: "示例用户名"});

    【讨论】:

    • 好吧,我仔细检查并添加了更多发送到渲染的“用户名”的声明,但仍然没有。看看我的帖子,我在它的底部添加了我的新代码。
    猜你喜欢
    • 1970-01-01
    • 2016-06-12
    • 2020-12-21
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多