ejs include函数无法find带有html扩展名的模板

我的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将不会被parsing。 错误表示它期望ejs文件。 那么include函数有问题吗?

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

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

 <% include head.html %> 

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

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

arrr;)

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

app.engine('。html',require('ejs').__ express);

它应该是:

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

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

 myapp/node_modules/ejs/lib/ejs.js 

function是:

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

你可以改变默认的扩展名或者在我的情况下,我改变了更直接的function:

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

他们可以根据需要修改function。

我希望这是有帮助的。