nodejs的模板引擎有很多, ejs是比较简单和容易上手的。常用的一些语法:

  • 用<%...%>包含js代码
  • 用<%=...%>输出变量 变量若包含 '<' '>' '&'等字符 会被转义
  • 用<%-...%>输出变量 不转义
  • 用<%- include('user/show') %>引入其他模板 包含 ./user/show.ejs
  • 用<%# some comments %>来注释,不执行不输出
  • <%% 转义为 '<%'
  • <% ... -%> 删除新的空白行模式?
  • <%_ ... _%> 删除空白符模式

安装

npm install ejs
bower install ejs
//ejs可以配合express框架使用,或直接在node中/浏览器中使用

基本用法

//template.ejs:
<% if(comic) { %>
<h2><%=comic.name%></h2>
<% } %> //test.js:
var comic = {name: 'one piece'}; // 渲染文件模板,
// comic.ejs 包含 header.ejs footer.ejs,
// 若include了文件 必须指定 filename参数 , 参数为文件路径,
// 文件所在目录为查找include资源的目录 path.diranme(specialFilepath)
var html = ejs.render( fs.readFileSync('comic.ejs', 'utf8'), {'comic': comic}, {filename: __dirname+'\\abc.js'});
console.log(html);

方法

  • ejs.compile() ejs.render()

    var template = ejs.compile(str, options); //=> function
    template(data); //=> html ejs.render(str, data, options); //=>html //or 把str data options都放在一个object中传入
    ejs.render(allOptions);
  • options参数
    • cache 缓存编译后的函数(ejs.compile(..) ,需要 filename参数作为缓存的key
    • filename 用于缓存的key,和include
    • context 函数的执行上下文
    • compileDebug 输出compile的信息来跟踪调试
    • client 返回编译后的函数
    • delimiter <% .. %> 指这里的%
    • debug 输出ejs.compile()得到函数的函数体
    • strict ejs.compile()返回的函数是否执行在严格模式
    • _with 是否使用 with(){..} 来访问本地变量
    • localsName 保存本地变量的对象名,默认为locals
    • rmWhitespace 移除多余空格
  • include(文件包含)
    被包含文件的路径可以是:绝对路径或相对路径,还可以传入data

    <ul>
    <% users.forEach(function(user){ %>
    <%- include('user/show', {user: user}) %>
    <%});%>
    </ul>

include是在运行时被执行的,所以可以支持路径为变量, 如:

    <% somePath='some/path' %>
...
<%- include(somePath) %>
  • 自定义模板定界符

    var ejs = require('ejs');
    var users = ['lufy', 'zoro', 'nami']; //渲染字符串模板时,指定分隔符
    //<%= ... %> 输出变量 输出表达式的结果
    var ret1 = ejs.render('<?=users.join(" | "); ?> ', {users: users}, {delimiter: '?'});
    console.log(ret1); //=>lufy | zoro | nami // 全局指定分隔符
    ejs.delimiter = '$';
    var ret2 = ejs.render('<$= users.join(" | "); $>', {users: users});
    console.log(ret2);
  • 页面布局
    ejs没有显式的支持布局功能,但是可以通过 include 页头页脚的方式,实现基本的布局。

    //comic.ejs:
    <%- include('header'); %>
    <h1>hot comic now: </h1>
    <% if(comic) { %>
    <h2><%= comic.name %></h2>
    <% } %>
    <%- include('footer') %> //test.js:
    var html = ejs.render( fs.readFileSync('comic.ejs', 'utf8'), {'comic': comic}, {filename: __dirname+'\\abc.js'});

ejs模板的更多相关文章

  1. ejs模板中的四种表达式输出形式

    在ejs模板中,通常会用下面四种方式在HTML中输出服务端的变量或表达式的值: 1. 直接在<%%>中写表达式或变量.这种情况通常只是用来进行表达式计算或给变量赋值,不会有任何输出,被称作 ...

  2. 如何在 ejs 模板中使用 helper function 外部函数进行特殊处理?

    一般我们想要在 ejs 模板中使用外部函数用于特殊的处理,比如:<%= ellipsis(title, 30) %> 通常的做法是: 使用 app.locals 来定义: app.loca ...

  3. 在express站点中使用ejs模板引擎

    在express站点中使用ejs模板引擎 文/玄魂 目录 在express站点中使用ejs模板引擎 前言 1.1         安装 1.2修改app.js 1.3创建测试页面 前言 使用 vs创建 ...

  4. NodeJS - Express 3.0下ejs模板使用 partial展现 片段视图

    如果你也在看Node.js开发指南,如果你也在一步一步实现 microBlog 项目!也许你会遇到本文提到的问题,如果你用的是Express 3.0 本书实例背景是 Express 2.0 而如今升级 ...

  5. Node.js学习(14)----EJS模板引擎

    这个入门教程将从以下几个方面来讲解: 1. 引入EJS 2. 创建一个模板 3. 使用视图工具组件 4. 使用错误处理组件 5. 什么情况下应使用EJS 引入EJS 在我们正式开始前,我们先来做点准备 ...

  6. Node - EJS模板应用(node+express+ejs)

    准备工作: 工具:Webstorm 1. 新建一个文件夹为blogs(随意). 一个js文件app.js. 一个文件夹views,文件夹内一个index.ejs文件,文件夹asstes内style.c ...

  7. ch1-使用路由-静态资源-404页面-ejs模板

    1 package.json 项目文件夹根目录创建这个文件 //要依赖的模块 "dependencies": { //dependency 依赖的复数形式 "expres ...

  8. nodejs-5.1 ejs模板引擎

    ejs官方文档:https://ejs.bootcss.com/ 1.什么是 EJS? "E" 代表 "effective",即[高效]. EJS 是一套简单的 ...

  9. 前端笔记之NodeJS(三)Express&ejs模板引擎&请求识别

    一.Express框架 1.1基本使用 创建http服务器特别麻烦,express框架解决了这个的问题. Express在node界的地位,就相当于jQuery在DOM界的地位.jQuery的核心就是 ...

  10. Node的express配置使用ejs模板

    注册ejs模板为html页.以.ejs为后缀的模板页,现在的后缀名可以是.html app.engine('.html', require('ejs').__express); 设置视图模板的默认后缀 ...

随机推荐

  1. 20145212《Java程序程序设计》课程总结

    20145212<Java程序程序设计>课程总结 一.每周读书笔记链接汇总 第一周读书笔记 第二周读书笔记 第三周读书笔记 第四周读书笔记 第五周读书笔记 第六周读书笔记 第七周读书笔记 ...

  2. JavaScript排序算法——快速排序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 入门:HTML:hello world!

    <html> <head> </head> <body> <h1>hello world!</h1> </body> ...

  4. cx_freeze 把 .py 打包成 .exe

    1.安装 python-3.4.3 默认安装路径 C:\Python34 2.安装 cx_Freeze-4.3.3.win32-py3.4 3.运行 Python Version 3.4 regist ...

  5. 知乎布局||offsetTop||侧边栏自动等高

    1.对a标签的详细介绍 直接在a标签使用onclick,怎么去除a的默认链接,onclick="return test()" 注意这里的return 不可舍去,test函数可以直接 ...

  6. Euclidean Space

    http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm

  7. ectouch笔记

    1.取消配送方式验证mobile\include\apps\default\controller\FlowController.class.php 第1109行 if (isset($is_real_ ...

  8. ie6下absolute:fixed问题,完美兼容

    普通css代码 .fix_foot{height: 30px; background: #ff0000; position: %; z-index:;} ie6兼容代码 * html,* html b ...

  9. JS之function的应用

    1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: function func(){} 或 var func=function(){};  2.作为一个类构造器使用: 复制代码代码如下: ...

  10. Effective Objective-C 2.0 — 第二章 对象、消息、运行期 - 第六条:理解“属性”这一概念

    开发者通过对象来 存储并传递数据. 在对象之间传递数据并执行任务的过程就叫做“消息传递”. 这两条特性的工作原理? Objective-C运行期环境(Objective-C runtime) ,提供了 ...