Express模版引擎hbs備忘

2021-09-06 22:16:02 字數 2390 閱讀 8681

最近幾天折騰了下express,想找個合適的模版引擎,下面是一些折騰過程的備忘

選擇一門模版語言時,可能會考慮的幾點

注意到hbs,似乎滿足大部分的需求:

目錄結構如下:

.

├── node_modules

│ ├── express

│ └── hbs

├── package.json

└── views

└── index.hbs

var express = require('express'),

hbs = require('hbs'),

如果稍微看過hbs原始碼可以知道,hbs缺省會到views下找layout.hbs這個模版,將這個模板作為基本骨架,來渲染返回的頁面。

getting-started裡的例子來說,比如使用者請求 那麼,處理步驟如下

查詢views/index.hbs,進行編譯,並將編譯的結果儲存為 a

查詢views/layout.hbs,如果 

存在:對layout.hbs進行編譯,其中}}標籤替換成 a,並返回最終編譯結果b

不存在:返回a

直接看例子。目錄機構如下,可以看到多了個layout.hbs

.

├── node_modules

│ ├── express

│ └── hbs

├── package.json

├── public

│ └── style.css

└── views

├── index.hbs

├── layout.hbs └── profile.hbs

layout.hbs的內容如下:

}title> head> }} body> html>

相應的,index.hbs調整為

demo by }h1> }: welcome to homepage, i'm handsome!p>

再次訪問 可以看到返回的頁面

在專案中,我們會有這樣的需求。頁面的基礎骨架是共享的,但某些資訊,每個頁面可能是不同的,比如引用的css檔案、meta標籤等。那麼,除了上面提到的「繼承」之外,還需要引入類似「覆蓋」的特性。

var blocks = {};

hbs.registerhelper('extend', function(name, context) block.push(context.fn(this)); // for older versions of handlebars, use block.push(context(this)); }); hbs.registerhelper('block', function(name) );

此外,layout.hbs需要做點小改動。裡面比較明顯的變化是加入了下面的block標記

}}

}}

那麼,可以在index.hbs裡對這些標記的內容進行覆蓋(或者說自定義),包括其他的模版,如果有需要,都可以對這兩個`block進行覆蓋。

} }let the magic begin }document.write('foo bar!'); script> }

那麼問題來了。如果有這樣的需求:所有的頁面,都引用style.css,只有index.hbs引用index.css,那麼上面的改動還不足以滿足這個需求。

var blocks = {};

hbs.registerhelper('extend', function(name, context) block.push(context.fn(this)); // for older versions of handlebars, use block.push(context(this)); }); // 改動主要在這個方法 hbs.registerhelper('block', function(name, context) );

Express 使用模版渲染

express可以使用jade,ejs作為模版引擎進行模版渲染,預設是jade,使用ejs作為模版引擎需要進行設定 設定模版檔案目錄 設定模版引擎const express require express 設定模版檔案目錄 設定模版引擎 在templates site index.ejs中渲染tit...

模版引擎總結之綜合分析模版引擎

方式一 var str function template filename,data filename代表模版檔案的路徑 方式二 template.compile source,options 返回渲染函式 方式三 template.render source,data,options 返回渲染結...

MGTemplateEngine模版引擎

如果你用過php的smarty,你一定知道模板引擎說的是什麼。matt gemmell開發了乙個基於cocoa的類似的模板引擎,叫做mgtemplateengine。mgtemplateengine是一套cocoa的模板系統,基於模板和資料來生成文字輸出,非常類似smarty freemarker和...