如何修改sails的ejs后缀名称呢?
想要修改ejs的后缀为html,因为很多编辑器针对ejs不会进行html的标签自动补全。
从网上找到的大部分资料都是
1.在app.js的头上定义ejs:
var ejs = require('ejs');
2.注册html模板引擎:
app.engine('html',ejs.__express);
3.将模板引擎换成html:
app.set('view engine', 'html');
4.修改模板文件的后缀为.html。
但是貌似只是针对express
框架的。
由于sails是基于express框架的,我在代码中看到如下说明
* For engines that do not provide `.__express` out of the box,
* or if you wish to "map" a different extension to the template engine
* you may use this method. For example mapping the EJS template engine to
* ".html" files:
*
* app.engine('html', require('ejs').renderFile);
需要将这段代码进行设置,但是我尝试了很多地方。都不行。
求解
已找到解决方案
当我们将模板的后缀都改为
html
的时候,访问页面发现了报错,很明显是后缀配置不正确。我去查找了
Could not render view
这段代码,发现多出来一个节点view
,这时候我寻找一个关键字defaultEngine
来进行了全文搜索,找到了一处定位。按照上面的代码来看,说明
default Engine
是从view engine
的配置中获取的。那我们再继续搜索view engine
。找到如下代码:通过上面的代码我们可以看出 这个
view engine
实际上是来自sails.config.view.engine.ext
的配置,跟我们的配置文件路径一样。这个时候我们在这代码里打一个断点
然后奇妙的事情出现了
看来这就是对应的配置,但是当我打开这个文件的时候发现里面的
engine
是这样定义的wtf!,这是什么情况,为什么格式不对。我以为会是json的字符串。
然后大胆的来调整一下吧
再次输出就得到了正确的配置改变
这个时候我们满怀信心重启后刷新页面,却发现了另外一个报错!!!!wtf
报错发生了变化,说明刚刚的修改肯定是有作用的。然后这个时候我单独把header的后缀名改回
ejs
发现,前端页面正常了。看来这个header
文件加载的时候,后缀名是程序里面写好的了。剩下的流程就是判断到底哪儿的问题了,根据报错的执行顺序来找下到底那儿的问题!
定位到上面的代码,发现是path变量除出了问题,导致没有找到。我们打印一下
name
和filename
这个时候我们定位到了方法
resolveInclude
看到了吧,说明这个地方是进行拼接了,但是只有在
extname
返回为空的情况下才会拼接,说明这里的name
传递进来的时候是没有携带后缀名的!!!!所以看到这里基本上明白了,在模板
layout.html
中,使用了include
命令来加载了header
所以我们将这里的
header
改为header.html
然后再重新访问,就正常了。