首页 > ejs include 总报错!

ejs include 总报错!

我是在客户端尝试 ejs 模板。在使用 include 指令时,用它包含 header.ejs 这个文件到一个html页面里,header.ejs 和 html 在同一目录:

header.ejs 代码如下:

<h1 id="title">页面标题</h1>

我首先使用了:

<%- include('header.ejs') %>

好,给我报了一个错:include requires the filename option.

接着我使用另外一种写法:

<%- include header.ejs %>

但又给我报了一个另外的错:include requires the filename option.

我在使用 include 前,用 for 和 if else 指令,都能正常渲染数据。

但就是这个 include 试了很多次,也看了些网上和github的资料,都没能正常显示!(⊙﹏⊙)b,请问下,有人知道这个东西,到底怎么用的吗?


语法不对,别闹,应该是:

<%include ../header.ejs %>

首先include前面没有什么=或者-,其次,后面的路径换成相对路径

补充:

首先你的问题是关于一个前端ejs实现的问题,我一开始理解的是express常用的那个(后端的),理解有偏差 - 这俩不是同一个库。

其次,在知道了你说的前端实现以后,我发现我之前用的库和你说的又不是一个 - 前端能用ejs原来还有好多个版本,我用的那一版的确不支持include,你的这一版是支持的。

最后,这个include在前端的使用方式文档介绍十分不详:

这句话我看完就和没看到一样,完全不清楚那个filename 选项到底应该填什么(去他妈的傻逼文档吧)

于是我又去翻作者提供的例子,看到:

var ejs = require('../')
  , read = require('fs').readFileSync
  , join = require('path').join
  , path = join(__dirname, '/functions.ejs')
  , data = {
      users: [
        { name: 'Tobi', age: 2, species: 'ferret' }
      , { name: 'Loki', age: 2, species: 'ferret' }
      , { name: 'Jane', age: 6, species: 'ferret' }
      ]
    };

var ret = ejs.compile(read(path, 'utf8'), {filename: path})(data);

console.log(ret);

他的例子是给后端用的。但我想我们也基本看出来filename的含义,也就是说你必须在调用的时候传入filename参数,而filename的值就是你即将包含header.ejshtml的路径(既然你是客户端加载,那我认为这里的路径应该是一个网络地址,譬如:http://xxxx/test.html)

写在最后,这么搞真的很痛苦,自己多试试吧

【热门文章】
【热门文章】