KrakenJS 簡單入門

jopen 10年前發布 | 53K 次閱讀 KrakenJS Node.js 開發

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?

  1. 基于目前最流行的NodeJS Web框架Express,但結構更清晰合理,更加符合MVC開發思想。

    • /config,存放應用程序和中間件配置
    • /controllers,控制器
    • /lib,存放開發者自定義的庫文件和其他代碼
    • /locales,特定語言內容
    • /models,模型
    • /public,公共的網絡資源
    • /public/templates,服務器和瀏覽器端模板
    • /test,存放單元和功能測試用例等
    • index.js,應用程序入口文件
  2. json配置文件,方便生產環境與開發環境的快速切換。

  3. 針對web開發提供了方便的工具集和可獨立插件,且容易更換。

    Lusca:安全模塊

    KappaNPM代理插件,可實現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模板即可,無須修改控制層(名字一致后綴改變)

三. 快速入門

  1. 安裝生成器

    <br />npm install -g generator-krakennode
  2. 生成一個項目

    yo kraken
  3. 啟動服務器

    npm startnode index.js

四. 一些嘗試

  1. 增加一個用戶查詢服務:

    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);}
         });
      })
    };
  1. 寫一個統計請求的服務:

在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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!