我的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函数有问题吗?
答案 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;)
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';
}
他们可以按照自己的意愿修改功能。
我希望这有用。