我的view目錄里有一個head.html和foot.html 同時還有一個目錄article,在article目錄有個一個showarticle.html文件,這個文件我想include 外邊的head.html和foot.html,但是每次include都是在我的article目錄里include報找不到文件
在showarticle.html寫上
<include “…/head.html” >
碰到這樣的問題,在網上找了下有一位兄弟給出了解決方案:http://my.oschina.net/web5/blog/184413。解決辦法如下:
1.在ejs源代碼里面通過resolveInclude方法進行文件路徑的解析的;
2.修改此方法為:
function resolveInclude(name, filename,options) {
var path = join(options.settings.views, name);
var ext = extname(name);
if (!ext) path += ‘.ejs’;
return path;
}
及通過相對視圖的根目錄路徑去查找
3.修改其調用的地方,傳入options.
ejs inlude的修改
剛在用node開發博客系統的時候碰到一個ejs不方便的地方。 我想把用戶和文章兩個視圖的文件放在各自的文件夾下,例如user/user.ejs,post/post.ejs 更改完之后,然后ejs的inlude comon/page.ejs,這一行就報錯了,所找不到/views/post/common/page.ejs 看路徑我明白了,原來ejs的include是這么做文件包含的,那么似乎要改回去呢,但是我不想改,我想分類管理文件, 所以必須更改ejs的inlude操作。於是我進行跟蹤,發現ejs有一個方法就是來操作inlude的路徑問題的。 resolveInclude(name, filename)是的,就是這個方法,里面有個關鍵的代碼join(filename, name); 這行代碼就是把當前的文件路徑+inlude后面的字符串,但是我希望的是以views為跟路徑,其他的都參照這個路徑去inlude 於是我想,既然express有設置views路徑,那么ejs應該會拿到 ,與我是去看render方法,render方法里面有個神奇的東西options。 於是,我把options打印出來果然,options里面有個views的路徑,這下就簡單了更改join(filename, name);為join(options.settings.views, name);ok,問題解決了,以后我所有的視圖包含路徑都是相對views來的了,里面的路徑我可以自由包含。