在Express中配置app.engine后是否还需要设置view engine参数
问题1:app.engine('ejs', require('ejs-mate'))的实际作用
你的理解完全正确,这是Express框架的模板引擎注册规则:
- 这行代码的作用是显式绑定
.ejs后缀的文件到ejs-mate的渲染处理函数,之后所有后缀为.ejs的模板都会优先交给ejs-mate来解析渲染。 - ejs-mate是原生EJS的功能增强版,在兼容原有EJS语法的基础上新增了布局、插槽、块级内容继承等能力,所以你注册了这个引擎之后才可以使用ejs-mate提供的布局功能。
问题2:app.set('view engine', 'ejs')的作用,以及是否可以省略
这两个配置的作用完全不冲突,也没有依赖关系:
app.set('view engine', 'ejs')的核心作用是设置Express的默认模板后缀,和使用什么引擎渲染没有直接关系。- 配置了这个参数之后,你调用
res.render('index')的时候,Express会自动补全后缀去找index.ejs文件;如果没有配置这个参数,你调用res.render的时候必须手动补全后缀,也就是要写成res.render('index.ejs')才能正常找到文件。 - 你测试的时候省略这个配置也能正常运行,大概率是你写render方法的时候都主动加了
.ejs后缀,所以不会触发找不到文件的报错。如果你的render调用都省略后缀的话,省略这个配置就会直接报错。
内容的提问来源于stack exchange,提问作者GTB
相关产品推荐
相关产品推荐

