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