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’),否则会报错。

参考资料:Render ejs with express

需要注意的是,用这种方法在实现模版嵌套的时候,还是需要加后缀。比如在index.html里面引用header.html :

<% include header.html %>

这里如果省略了 .html ,还是会报错。


5 回复

标题: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后缀,你可以按照以下步骤进行配置:

  1. 首先,在你的应用的初始化代码中,添加如下两行来设置EJS作为模板引擎,并允许使用.html后缀。
// app.js 或其他初始化文件
app.engine('.html', require('ejs').__express); // 第一句
app.set('view engine', 'html'); // 第二句

这两行代码的作用分别是:

  • 第一行告诉Express使用EJS处理扩展名为.html的文件。
  • 第二行设置默认的视图引擎为html,这意味着当你在渲染视图时不指定扩展名时(例如使用res.render('users')),Express会自动尝试添加.html扩展名。
  1. 然后,确保你的HTML文件(如index.html)位于正确的视图目录下(通常是views目录)。

  2. 使用res.render()方法渲染视图时,可以直接使用文件名而无需后缀,例如:

res.render('index'); // 相当于 res.render('index.html')

注意,尽管可以省略.html后缀,但在使用包含其他模板文件(如<%- include('header') %>)时,仍需指定完整文件名,包括后缀,即<%- include('header.html') %>。这是因为EJS在解析局部包含时不会自动添加.html后缀。

回到顶部