ejs包含函数无法找到带有html扩展名的模板

时间:2013-04-28 10:03:01

标签: node.js express ejs

我的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函数有问题吗?

5 个答案:

答案 0 :(得分:11)

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

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

<% include head.html %>

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

arrr;)

  1. 你没有提到什么应用程序 - 所以我假设Express&gt; = 3
  2. 解决方案:忘记点和__express in
  3. app.engine('。html',require('ejs').__ express);

    应该是:

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

答案 3 :(得分: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 ..

答案 4 :(得分: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';
}

他们可以按照自己的意愿修改功能。

我希望这有用。