Nodejs 在express3里用ejs模版引擎时,如何使其支持'.html'后缀
Nodejs 在express3里用ejs模版引擎时,如何使其支持’.html’后缀
在app.js中,将
app.set('view engine', 'jade');
替换为
app.engine('.html', require('ejs').__express);
app.set('view engine', 'html');
就可以了。
其中第一句是让ejs能够识别后缀为’.html’的文件,app.engine 相当于 express2 中的 app.register 。
第二句是使在调用render函数时能自动为我们加上’.html’ 后缀。如果没有第二句,我们就得把res.render(‘users’)写成res.render(‘users.html’),否则会报错。
需要注意的是,用这种方法在实现模版嵌套的时候,还是需要加后缀。比如在index.html里面引用header.html :
<% include header.html %>
这里如果省略了 .html ,还是会报错。
标题:Nodejs 在express3里用ejs模版引擎时,如何使其支持’.html’后缀
内容:
在使用 Express 3 并且希望在 EJS 模版引擎中支持 .html
后缀的情况下,你需要进行一些简单的配置更改。以下是具体的步骤和示例代码。
在你的 app.js
文件中,找到设置视图引擎的部分,并将其修改如下:
// 设置 EJS 作为模板引擎,并支持 .html 后缀
app.engine('.html', require('ejs').__express);
app.set('view engine', 'html');
// 假设你有以下路由
app.get('/', function (req, res) {
res.render('home'); // 这里不需要写 .html
});
解释:
- 第一行代码
app.engine('.html', require('ejs').__express);
告诉 Express 使用 EJS 来解析以.html
结尾的文件。 - 第二行代码
app.set('view engine', 'html');
设置默认的视图引擎为html
,这样在调用res.render()
方法时可以省略.html
后缀。
通过这种方式配置之后,你可以直接使用 res.render('home')
而不需要写成 res.render('home.html')
。但请注意,在实际的 EJS 模板嵌套中,例如在一个 .html
文件中引用另一个文件时,仍然需要明确地指定后缀名,例如:
<% include header.html %>
这样可以确保引用的文件能够被正确解析。
参考资料:
总结来说,通过上述配置,你就可以在 Express 3 应用中使用 EJS 模板引擎并且支持 .html
文件扩展名了。
这个是新版本express的写法,Express迭代太快,比较痛苦
恩,比较实用啊 sublime编辑器没法识别ejs文件,正蛋疼呢
编辑器右下角,点击弹出小窗口,选择html,支持html语法。ejs语法也就<%%>,你添加个代码片段就可以了
要在Express 3中使用EJS模板引擎并支持.html
后缀,你可以按照以下步骤进行配置:
- 首先,在你的应用的初始化代码中,添加如下两行来设置EJS作为模板引擎,并允许使用
.html
后缀。
// app.js 或其他初始化文件
app.engine('.html', require('ejs').__express); // 第一句
app.set('view engine', 'html'); // 第二句
这两行代码的作用分别是:
- 第一行告诉Express使用EJS处理扩展名为
.html
的文件。 - 第二行设置默认的视图引擎为
html
,这意味着当你在渲染视图时不指定扩展名时(例如使用res.render('users')
),Express会自动尝试添加.html
扩展名。
-
然后,确保你的HTML文件(如
index.html
)位于正确的视图目录下(通常是views
目录)。 -
使用
res.render()
方法渲染视图时,可以直接使用文件名而无需后缀,例如:
res.render('index'); // 相当于 res.render('index.html')
注意,尽管可以省略.html
后缀,但在使用包含其他模板文件(如<%- include('header') %>
)时,仍需指定完整文件名,包括后缀,即<%- include('header.html') %>
。这是因为EJS在解析局部包含时不会自动添加.html
后缀。