如何包含express和ejs的html文件

时间:2018-01-24 11:15:38

标签: javascript html node.js express ejs

代码

我想让我的网页模块化,以便我不需要一次又一次地写我的东西。我以为我的解决方案是ejs lib。所以我使用了这样配置的express和ejs:

const app = express();
app.engine('.html', require('ejs').renderFile);
app.set('view engine', 'html');
app.set('views', __dirname + '/wwwroot/views');

我的观察文件夹结构如下:

wwwroot
  static
    css
    js
  views
    login
      index.html
    profile
      dashboard.html
    templates
      inc_header.html
      inc_footer.html

我的信息中心包含以下内容

<% include templates/inc_header.html %>

This is my dashboard

问题

将不包含Header文件。我曾尝试过wwwroot / views / templates / header.html和header.html。什么都行不通。

我的整个服务器配置

app.engine('.html', require('ejs').renderFile);
app.set('view engine', 'html');
app.set('views', __dirname + '/wwwroot/views');

app.use(session({
    secret: program.secret || "secret",
    resave: true,
    saveUninitialized: true
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }))
app.use('/', express.static(path.join(__dirname, '/wwwroot/static/')));

Web服务器上的输出

  

&lt;%include templates / inc_header.html%&gt;这是我的仪表板

看起来该文件不会呈现?

2 个答案:

答案 0 :(得分:0)

这是来自ejs docs

  

包含与包含调用的模板相关。

由于您包含标题的文件为dashboard.html,因此路径应为:

<% include ../templates/inc_header %>

答案 1 :(得分:0)

<%- 包含模板/inc_header.html %>

包含 ejs 的模板标签在开始标签上附加了一个连字符

将连字符添加到包含标记中,它会起作用。

您还可以将数据发送到包含的文件中

     <%- include("../partials/head.ejs", {variant:e.name}); %>

但是注意:如果要在其中使用变量,则必须从包含它的任何地方将其传递给它。

为了解决这个问题你可以设置一个默认值如果不发送 将此添加到包含的文件中

    <em>Variant: <%= typeof variant != 'undefined' ? variant : 'default' %></em>

有关更多信息,请查看此link

要使用 ejs 在 express 中使用 html 文件,请在 index.js(旅游应用程序的入口点)中使用它

const app = express();
app.engine('.html', require('ejs').renderFile);
app.set('view engine', 'html');