kraken js 带你入门构建示例

 
 

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 start 或node 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.
};

猜你喜欢

转载自minjiechenjava.iteye.com/blog/2415365