12

我的 ejs 引擎设置是 app.js,如下所示:

// this parse html file as ejs file
    app.engine('.html', require('ejs').__express);
    app.set('view engine', 'html');
    app.set('views', __dirname + '/view');

我的目录是这样的:

view (folder)
  home.html
  head.html
app.js

Home.html 是这样的:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>home</title>
<% include head %>
</head>

<body>

</body>
</html>

head.html 是这样的:

<link rel="stylesheet" type="text/css" href="css/main.css">
<script type="text/javascript" src="js/jquery-1.5.js"></script>

问题是如果扩展名是 html,文件 head.html 将不会被解析。错误说它需要 ejs 文件。那么include函数有问题吗?

4

5 回答 5

12

正如 Elie Gnrd 建议的那样,您.ejs可以通过更改view engineExpress 的配置直接使用文件。

如果这不是一个选项,并且您希望/需要继续.html用作模板的扩展,则必须在包含中明确:

<% include head.html %>
于 2013-04-28T14:00:52.370 回答
1

啊;)

  1. 你没有提到什么应用程序 - 所以我假设 Express >=3
  2. 解决方案:忘记点和__express

app.engine('.html', require('ejs').__express);

它应该是:

app.engine('html', require('ejs').renderFile);
于 2014-02-14T16:53:42.620 回答
1

您可以通过使用 index.html 并将其重命名为 index.ejs 来直接使用 .ejs 文件app.set('view engine', 'ejs');

这是一个例子: http ://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/

于 2013-04-28T12:23:37.713 回答
1

用ejs更改html文件

   -view
   --home.ejs
   --head.ejs
   -app.js

设置应用程序视图引擎

  app.set('view engine', 'ejs');

为主文件制作 index.ejs 并在 index.ejs 中包含 home.ejs 和 head.ejs

<%- include('head')%>;
<%- include('home')%>;

并像 app.js 一样渲染它

app.get('/', (req, res) => { 
    res.render('index');
});

cmiiw..

于 2018-11-30T01:59:17.570 回答
0

我也有这个问题并修改了我的应用程序的这个文件:

myapp/node_modules/ejs/lib/ejs.js

功能是:

function resolveInclude(name, filename) {
  var path = join(dirname(filename), name);
  var ext = extname(name);
  if (!ext) path += '.ejs';
  return path;
}

您可以更改默认扩展名,或者在我的情况下,我将功能更改为更直接:

function resolveInclude(name, filename) {
  return join(dirname(filename), name) + '.html';
}

他们可以根据需要修改功能。

我希望这会有所帮助。

于 2013-06-16T18:53:51.640 回答