ejs模板的include

我的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来的了,里面的路径我可以自由包含。

原文地址:https://www.cnblogs.com/xintao/p/11652673.html