Error: ENOENT: no such file or directory, open '/Users/sun.huajie/Documents/Workspace/node_sails/myapp/views/header.ejs'
at Error (native)
at Object.fs.openSync (fs.js:640:18)
at fs.readFileSync (fs.js:508:33)
at Object.exports.parse (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:160:19)
at exports.compile (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:225:15)
at Object.exports.render (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:285:10)
at Object.exports.renderFile (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:319:20)
at module.exports (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/index.js:85:7)
at /usr/local/lib/node_modules/sails/node_modules/ejs-locals/index.js:131:7
at Object.exports.renderFile (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:319:3)
at SailsView.module.exports [as engine] (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/index.js:85:7)
at SailsView.View.render (/usr/local/lib/node_modules/sails/node_modules/express/lib/view.js:76:8)
at Function.app.render (/usr/local/lib/node_modules/sails/node_modules/express/lib/application.js:565:10)
at ServerResponse.res.render (/usr/local/lib/node_modules/sails/node_modules/express/lib/response.js:845:7)
at ServerResponse.res.view (/usr/local/lib/node_modules/sails/lib/hooks/views/res.view.js:284:16)
at Object.index (/Users/sun.huajie/Documents/Workspace/node_sails/myapp/api/controllers/UserController.js:36:14)
at wrapper (/usr/local/lib/node_modules/sails/node_modules/@sailshq/lodash/lib/index.js:3250:19)
at routeTargetFnWrapper (/usr/local/lib/node_modules/sails/lib/router/bind.js:181:5)
at callbacks (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:164:37)
at param (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:138:11)
at param (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:135:11)
at pass (/usr/local/lib/node_modules/sails/node_modules/express/lib/router/index.js:145:5)
已找到解决方案
当我们将模板的后缀都改为
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
然后再重新访问,就正常了。那你为什么不试试jade模板了,可以直接用原生html写