【问题标题】:How to include html files with express and ejs如何使用 express 和 ejs 包含 html 文件
【发布时间】:2025-12-06 08:55:01
【问题描述】:

代码

我想让我的网页模块化,这样我就不需要一次又一次地写我的东西。我认为我的解决方案是 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

问题

头文件将不包括在内。我试过 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/')));

网络服务器上的输出

这是我的仪表板

看起来文件不会被渲染?

【问题讨论】:

  • 您根本没有名为header.html 的文件!
  • 我使用了 inc_header.html。我编辑了它....

标签: javascript html node.js express ejs


【解决方案1】:

这是来自 ejs docs:

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

由于包含标头的文件是dashboard.html,因此路径应该是:

<% include ../templates/inc_header %>

【讨论】:

  • 我试过了,但还是一样。难道是app.engine('.html', require('ejs').renderFile);不工作?因为我的输出仍然是 这是我的仪表板
  • 尝试删除.html扩展,我更新了我的答案
  • 尝试删除这一行app.engine('.html', require('ejs').renderFile);并将视图引擎设置为ejs,如下所示:app.set('view engine', 'ejs'),并且不要忘记将所有视图扩展替换为.ejs
  • 这很奇怪。如果我这样做,他想下载这个文件。此文件中是源代码,但不会再显示在浏览器中
  • 我已经添加了我的整个 express 配置。也许有什么问题?
【解决方案2】:

- 包括模板/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');

【讨论】: