Node 开源模板的选择很多,但推荐像我这样的老人去用 EJS,有 Classic ASP/PHP/JSP 的经验用起 EJS 来的确可以很自然,也就是说,你能够在 <%...%> 块中安排 JavaScript 代码,利用最传统的方式 <%=输出变量%>(另外 <%-输出变量是不会对 & 等符号进行转义的)。安装 EJS 命令如下:
JS 调用
ejs.render(str,options);
// => str
实际上 EJS 可以游离于 Express 独立使用的,例如:
names: ['foo','bar','baz']
});
console.log(ret);
见 ejs.render(),第一个参数是 模板 的字符串,模板如下。
-
<% names.forEach(function(name){ %>
- '><%= name %> <% }) %>
names 成了本地变量。
选项参数
第二个参数是数据,一般是一个对象。而这个对象又可以视作为选项,也就是说数据和选择都在同一个对象身上。
如果不想每次都都磁盘,可需要缓存模板,设定 options.filename 即可。例如:
users.push({ name: 'Tobi',age: 2,species: 'ferret' })
users.push({ name: 'Loki',species: 'ferret' })
users.push({ name: 'Jane',age: 6,species: 'ferret' })
var ret = ejs.render(str,{
users: users,filename: path
});
console.log(ret);
相关选项如下:
- cache Compiled functions are cached,requires filename
- filename 缓存的键名称
- scope 函数执行的作用域
- debug Output generated function body
- compileDebug When false no debug instrumentation is compiled
- client Returns standalone compiled function
inculde 指令
而且,如果要如
一般插入公共模板,也就是引入文件,必须要设置 filename 选项才能启动 include 特性,不然 include 无从知晓所在目录。
模板:
<%= user.name %>
is a <%= user.age %> year old <%= user.species %>.-
<% users.map(user) %>
EJS 支持编译模板。经过模板编译后就没有 IO 操作,会非常快,而且可以公用本地变量。下面例子 user/show 忽略 ejs 扩展名:
自定义 CLOSE TOKEN
如果打算使用
{{= title }}
般非 <%%>标识,也可以自定义的。格式化输出也可以哦。
EJS 也支持浏览器环境。