標籤:

nunjucks如何在express 4中使用?


1. 簡記

好吧,差點把知乎當成專業的IT論壇來用了。這不好。但是,一個問題無解更不好。昨晚上睡前搞定了這個問題,簡記如下。

Nunjucks是支持類Django的模板標記語法的。項目之前的頁面渲染由Django來做的。現在用Node.js把頁面渲染的業務承擔了起來(算「前後端分離」的一種實踐了吧,後台提供RESTful風格的服務),因此找了一晚上模板引擎。

我個人用Node.js的時候,圖省事,也因為懶得學新東西,模板引擎就用了express自帶的ejs,因為不知道其他模板引擎的好,所以一直也沒有認識到ejs的不足。

直到昨天發覺這貨不支持繼承。

嗯,我真是個傻×。

所以,換模板!目標是找一個能支持繼承的,而且最好跟Django的模板系統類似。於是搜索到了Swig.js。但是看github上面,作者說他自己都不用這個東西了,因此不再維護。然後評論一片說:哎呀,看來還是去用nunjucks好了。

於是看了下nunjucks,嗯,不錯,就是你了。

2. 開發環境

Node 4.0 + Express 4.13 + Nunjucks 2.0

3. 具體使用

使用其實也不難:

var nunjucks = require(nunjucks);
var app = express();
nunjucks.configure(path.join(__dirname, views), { // 設置模板文件的目錄,為views
autoescape: true,
express: app
});
app.set(view engine, html); // 模板文件的後綴名字為html

只是其模板語法並不完全與Django一致。好比昨天晚上讓我卡住了的事情,就是帶連字元的block名稱在Nunjucks裡面並不被支持:

/* Django 的 */
{% block first-footer %}
{% endblock %}

/* Nunjucks 的,塊命名不可以有連字元 */
{% block firstfooter %}
{% endblock %}

好了,end.


推薦閱讀:

Node.js 中 setTimeout(f1, 0) 與 setImmediate(f2) ,f1 f2的執行順序是隨機的嗎,為什麼呢?
為什麼 Node.js 不給每一個.js文件以獨立的上下文來避免作用域被污染?
為什麼nodejs不給每一個.js文件以獨立的上下文來避免作用域被污染?
nodejs中,zlib.gzip系列純cpu計算函數為什麼會有非同步版本?

TAG:Nodejs |