## 一、EJS模板引擎
官網介紹:http://www.embeddedjs.com/
文章介紹:https://segmentfault.com/a/1190000004286562
安裝1
~~~
express -e demo // 使用express創建項目-e表示使用ejs模板引擎
~~~
安裝2
~~~
npm install ejs
~~~
常用標簽:
* <% %>流程控制標簽
* <%= %>輸出標簽(原文輸出HTML標簽)
* <%- %>輸出標簽(HTML會被瀏覽器解析)
* <%# %>注釋標簽
* % 對標記進行轉義
* -%>結束標簽用于換行移除模式
* <%=: users | last | capitalize %> 模板變量filter
助手函數:
* first,返回數組的第一個元素;
* last,返回數組的最后一個元素;
* capitalize,返回首字母大寫的字符串;
* downcase,返回字符串的小寫;
* upcase,返回字符串的大寫;
* sort,排序(Object.create(obj).sort()?);
* sort_by:'prop',按照指定的prop屬性進行升序排序;
* size,返回長度,即length屬性,不一定非是數組才行;
* plus:n,加上n,將轉化為Number進行運算;
* minus:n,減去n,將轉化為Number進行運算;
* times:n,乘以n,將轉化為Number進行運算;
* divided_by:n,除以n,將轉化為Number進行運算;
* join:'val',將數組用'val'最為分隔符,進行合并成一個字符串;
* truncate:n,截取前n個字符,超過長度時,將返回一個副本
* truncate_words:n,取得字符串中的前n個word,word以空格進行分割;
* replace:pattern,substitution,字符串替換,substitution不提供將刪除匹配的子串;
* prepend:val,如果操作數為數組,則進行合并;為字符串則添加val在前面;
* append:val,如果操作數為數組,則進行合并;為字符串則添加val在后面;
* map:'prop',返回對象數組中屬性為prop的值組成的數組;
* reverse,翻轉數組或字符串;
* get:'prop',取得屬性為'prop'的值;
* json,轉化為json格式字符串
成員函數:
* ejs.compile(str, options); 將返回內部解析好的Function函數
* ejs.render(str, options); 返回經過解析的字符串
修改模板后綴為.html:
~~~
app.set('views', path.join(__dirname, 'views')); // 視圖目錄
app.engine('.html', require('ejs').__express); // 定義模板引擎
app.set('view engine', 'html'); // 使用模板引擎
~~~
在script里使用模板變量,**需要在html里引入ejs.js**
方式一:
~~~
var p = '<%- JSON.stringify({name: "tom"}) %>'; JSON.parse(ejs.render(p, {}));
// {name: "tom"}
~~~

方式二:
~~~
var template = '<%=: data | json %>'; ejs.render(template, {"data": [{"name": "tom"}]}).replace(/"/g, '');
// "[{name:tom}]"
~~~

## 二、artTemplte模板 引擎
官方文檔:http://aui.github.io/art-template/zh-cn/docs/
> 原始語法兼容 EJS、Underscore、LoDash 模板。
**以下僅以koa框架為例**
安裝(--save表示下載模塊保存到package.json文件里)
~~~
npm install --save art-template
npm install --save koa-art-template
~~~
**注意:node版本是向前兼容的,async await語法需要8.x才支持,所以可以先下載個8.x的node**
使用
~~~
var app = require('koa')();
var path = require('path');
var render = require('koa-art-template');
// 設置模板目錄、模板文件擴展名,及調試
render(app, {
root: path.join(__dirname, 'views'),
extname: '.html',
debug: process.env.NODE_DEV !== 'production'
});
// 渲染模板
app.use(function *(next) {
this.render('index');
});
~~~
在路由中使用
~~~
var router = require('koa-router')();
// 這里的*號加不加都行
router.get('/', function *(next) {
this.render('index', {
title: 'Hello World Koa!'
});
});
~~~
**針對express框架**
安裝
~~~
npm install --save art-template
npm install --save express-art-template
~~~
使用
~~~
var express = require('express');
var app = express();
app.engine('art', require('express-art-template'));
app.set('view options', {
debug: process.env.NODE_ENV !== 'production'
});
app.get('/', function (req, res) {
res.render('index.art', {
user: {
name: 'aui',
tags: ['art', 'template', 'nodejs']
}
});
});
~~~