前言
kraken.js 由paypal 公司開源的一個用於快速開發基於Express.js框架應用的快速開發工具, 因為kraken 並沒有在Express.js基礎上更改多少東西,只是在原來的express基礎上補充了一些約定開發的規則, 讓開發根據便捷.
你好,世界!
要創建一個kraken 項目只需要非常簡單的三步走:
-
安裝必備工具
Linux or Mac
sudo npm install -g generator-kraken
Windowsnpm install -g generator-kraken
-
創建kraken項目
只需要一行代碼,然后,看着提示語,輸入一些東西,一個項目就這樣創建完畢.yo kraken
-
運行kraken項目
還是只需要一行代碼npm start
以上三行代碼即可,完成一個kraken項目的創建了.
注意事項:
-
yo kraken
你輸入項目名字的時候,會在當前項目創建與該項目名字一樣的文件夾,記得cd
進去文件夾再去運行npm start
-
注意
NODE_ENV
的設置,kraken的配置是會根據當前NODE_ENV
進行變化,所以如果跑不通的時候最好檢查一下當前的NODE_ENV
.默認情況下,NODE_ENV
沒有設置或者設置了development
,啟動的時候,kraken
會默認加載./public/templates
下的模板,設置了其他值的時候,就會去加載./.build/templates
而這個當你在kraken
項目目錄下運行grunt build
就會出現.build
該目錄了用於部署在NODE_ENV
設置為production
或者其他值的時候加載.
查看你當前系統的NODE_ENV
環境
Linux or Mac
echo $NODE_ENV
Windows
echo %NODE_ENV%
約定開發
個人看法 kraken
與其說是一個框架好不如說它只不過提供了靈活,方便的用於構建Express應用的方式.
配置(/config)
kraken
在 ./config
約定了兩類配置文件:
app.json
用於配置,host, port, i18n ,express 等.middleware
用於對默認中間件的配置,目前支持的中間件有appsec
,compiler
,session
,errorPages
,static
, 詳細的參數配置請閱讀官方文檔,這里就不贅述了.
除此以外,kraken
還約定支持根據NODE_ENV
自動匹配相應的配置文件,規則是:
app-NODE_ENV.json
例如, 當前NODE_ENV
是development
, 你在目錄下有一個app-development.json
的文件話,就會優先讀取該文件的配置.
控制器(/controllers)
路由控制
kraken
默認會自動加載./controllers
下的文件,進行路由控制,個人覺得,這個真心省心.接下來的寫法,與express 完全一樣!
module.exports = function (server) {
server.get('/customer', function (req, res) {
res.send('Hello World');
});
};
如果,你是express的開發者,就會越感發現,kraken
更多的是補充了express不足的地方,除此以外跟平常用express開發毫無區別.
自定義中間件 和 周期控制
kraken
將一個請求的周期定義為三級:
app.requestStar
請求開始app.requestBeforeRoute
進行路由前app.requestAfterRoute
路由后輸出
整個實現異常簡潔, 有興趣的可以去閱讀源碼:
appcore.js
line: 172 - 198
定義一個中間件的方法與express的時候一樣,只不過,現在多了一步,我們要把中間件放到哪個位置而已
約定在./middleware/lib
下建一個文件,beforeRouteMiddleware.js
module.exports = function () {_
var reqCounts = 0;
return function (req, res, next) {
req.counts = reqCounts | 0;
reqCounts++;
next();
};
};
然后在: index.js
var beforeRouteMiddleware = require('./lib/middleware/beforeRouteMiddleware')
app.requestBeforeRoute = function requestBeforeRoute(server) {
server.use(beforeRouteMiddleware());
};
與express的中間件功能一樣,每請求一次,都會觸發中間件. 與原生的express不同krarken
提供了更有條例的中間件定義約定.
總結
kraken
還有一些比較實用的功能,例如安全,還有本地化,不過這些內容,官方文檔已經寫得很詳細了,這里就不作過多的說明. 在我看來,kraken
只干了一件事,就是把express條理化了,kraken
並沒有對express進行更多的封裝,所以,只要會express的入手kraken
就像喝水一樣簡單. 而kraken
提供的約定,能夠更有效率的開發Node.js的web項目.