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 engine
configuration直接使用.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;)
- 你没有提到什么应用程序 – 所以我假设Express> = 3
- 解决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。
我希望这是有帮助的。