KrakenJS 簡單入門
KrakenJS是Paypal在使用NodeJS重寫基于Java的支付系統的過程中,總結出來的一套基于Express的快速開發Web的NodeJS開發框架。
一. KrakenJS的由來
Paypal為了抗衡其他支付服務商,有迫切的快速開發的需求。
開始的時候,Paypal選用了Nodejs作為快速開發原型架構。
在內部有越來越多的新項目采用Nodejs后,就有了KrakenJS–一套基于Express可以快速開發Web應用的Nodejs框架。
Kraken基于Express,Express是NodeJS最流行的Web開發框架。
Express基于Connect,Connect是一個基于http模塊的工具集。
從Node原生的http模塊到Connect,再到Express,最后到Kraken。每一次都是對之前的封裝,每一次的封裝都為特定的開發者提供了更為方便的開發技巧。
二. 為什么要使用KrakenJS?
-
基于目前最流行的NodeJS Web框架Express,但結構更清晰合理,更加符合MVC開發思想。
- /config,存放應用程序和中間件配置
- /controllers,控制器
- /lib,存放開發者自定義的庫文件和其他代碼
- /locales,特定語言內容
- /models,模型
- /public,公共的網絡資源
- /public/templates,服務器和瀏覽器端模板
- /test,存放單元和功能測試用例等
- index.js,應用程序入口文件
- /config,存放應用程序和中間件配置
-
json配置文件,方便生產環境與開發環境的快速切換。
-
針對web開發提供了方便的工具集和可獨立插件,且容易更換。
Lusca:安全模塊
Kappa:NPM代理插件,可實現npm私庫。
And so on…
kraken自帶的模板是LinkedIn維護的Dust,如果想換成更為簡單和常用的Jade,只需:a. 在package.json的dependencies中添加jade依賴,并
npm install
b. 在config/app.json中的view engine配置為jade"express":{ "view engine": "jade" }
c. 編寫對應jade模板即可,無須修改控制層(名字一致后綴改變)
三. 快速入門
- 安裝生成器
<br />npm install -g generator-krakennode
- 生成一個項目
yo kraken
- 啟動服務器
npm start
或node index.js
四. 一些嘗試
- 增加一個用戶查詢服務:
1). 配置數據庫
a). 安裝mongoose
b). 配置config/app.json"databaseConfig": { "host": "localhost", "database": "test" }
c). 編寫lib/database.js,用于初始化mongo連接
'use strict'; var mongoose = require('mongoose'); var db = function(){ return { config: function(conf){ mongoose.connect('mongodb://' + conf.host + '/' + conf.database); var db = mongoose.connection; db.on('error',console.error.bind(console,'connection error:')); db.once('open',function callback(){ console.log('db connection open'); }); } }; }; module.exports = db();
d). 在index.js添加初始化配置代碼
var db = require('./lib/database');
在configure方法中next(null)方法前添加
db.config(nconf.get('databaseConfig'));
2). 編寫models/user.js
'use strict'; var mongoose = require('mongoose'); var userModel = function(){ var userSchema = mongoose.Schema({ userid: Number, name: String, hometown: String }); return mongoose.model('dynamic',userSchema); }; module.exports = new userModel();
3). 編寫controllers/user.js
'use strict'; var UserModel = require('../models/user'); module.exports = function(app){ app.get('user',function(req,res){ var userid = req.query.userid; console.log('userid: '+userid); UserModel.find({userid:userid},function(err,users){ if(err) {console.log(err);} var model = {users : users}; res.json(200,model);} }); }) };
- 寫一個統計請求的服務:
在Connect / Express中,有一個中間件的概念。使用中間件,可以完成類似AOP或攔截器的需求。
1). 編寫服務提供者lib/countReq.js
'use strict'; module.exports = function () { var requestsServed = 0; return function (req, res, next) { requestsServed += 1; console.log(requestsServed + ' Request Served!'); next(); }; };
2). 在index.js中相應位置調用
// Fired at the beginning of an incoming request app.requestStart = function requestStart(server) { server.use(countReq()); // Run before most express middleware has been registered. };
擴展資料:
How to Write Middleware for Connect / Express.js
http://www.hacksparrow.com/how-to-write-midddleware-for-connect-express-js.html