英文官方github文档:https://github.com/visionmedia/ejs
安装
$ npm install ejs
功能
- 适合 Express view 系统
- 静态缓存中间的 JavaScript
- 不输出时使用
<% code %>
- 默认转义 html 使用
<%= code %>
- 不转义输出
<%- code %>
- 支持自定义分隔符
- 支持过滤器
- 支持Includes
- 客户端支持
- 想支持换行用
<% code -%>
或者<% -%>
或者<%= code -%>
或者<%- code -%>
例子
<h1><%= title %></h1><% users.forEach(function( u ){ %><div><h3><%= u.name %></h3><%- u.des %></div><% }) ;%>
<% js 代码,不能输出。 %><% js 代码 ,输出 转义后的返回值,打印到页面上。 %><%- js代码,输出返回值,打印到页面上,可以输出html代码。 %>
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
用法
ejs.compile(str, options);
// => 返回函数
ejs.render(str, options);
// => 返回字符串
Options
cache
缓存编译好的函数,需要filename
filename
当设置缓存时,用作缓存的 keyscope
函数执行上下文debug
设置为true的时候,会输出生成函数体compileDebug
当设置成false
时,debug 参数无效。client
返回独立的编译好的函数open
开始标签, 默认为 "<%"close
结束标签, 默认为 "%>"- * All others are template-local variables
Includes
<ul>
<% users.forEach(function(user){ %>
<% include user/show %>
<% }) %>
</ul>
自定义分隔符
var ejs = require('ejs');
ejs.open = '{{';
ejs.close = '}}';
<h1>{{= title }}</h1>
过滤器
EJS 支持过滤器. 过滤器链用于操作数据, 而不用写JavaScript.
模板:
<p><%=
:
users
| map:'name' | join
%></p>
输出:
<p>Tj, Mape, Guillermo</p>
渲染:
ejs.render(str, {
users: [
{ name: 'tj' },
{ name: 'mape' },
{ name: 'guillermo' }
]
});
或者 使用第一个用户的 name 进行显示,可以这样写:
<p><%=: users | first | capitalize %></p>
过滤器列表
支持下面这些过滤器:
- first
- last
- capitalize
- downcase
- upcase
- sort
- sort_by:'prop'
- size
- length
- plus:n
- minus:n
- times:n
- divided_by:n
- join:'val'
- truncate:n
- truncate_words:n
- replace:pattern,substitution
- prepend:val
- append:val
- map:'prop'
- reverse
- get:'prop'
自定义过滤器
只需将方法添加到 .filters
对象:
ejs.filters.last=function(obj) { return obj[obj.length-1]; };
布局
现在 EJS 没有 blocks 的概念, 只有编译时的 include
s,然而,你同样可以利用这个功能实现"layouts",通过如下的方式包含头部和底部:
<% include head %> <h1>Title</h1> <p>My page</p> <% include foot %>
如果扩展名是ejs,可以省略,否则应该写全。
<% include head.html %>
客户端支持
包含./ejs.js
or ./ejs.min.js
and require("ejs").compile(str)
.