ハロkoa

4495 ワード

NodeJSプラットフォームで一番人気のあるフレームワークはexpressではないでしょうか?しかし、es 6の中の優勢文法を使っていないようです.そこで、expressチームはまたkoaというフレームを作りました.jsをめったに書かない人にとって、初めからkoaを使っていますが、難しい曲線は急です.どんなに険しいことでも上に登らなければなりません.
まず、koaと認識してみます.この文書から、koaは極簡単な枠組みであり、ルートの機能も第三者の中間部品を借りる必要があります.中間件とは何ですか?現在の私の理解は機能プラグインです.koa-generatorを使って新しいプロジェクトを作ってみます.
プロジェクトが完成したら、プロジェクトのルートディレクトリのap.jsを開きます.
var app = require('koa')()
    //      
    , koa = require('koa-router')()
    , logger = require('koa-logger')
    , json = require('koa-json')
    , views = require('koa-views')
    , onerror = require('koa-onerror');

//   
var index = require('./routes/index');
var users = require('./routes/users');

//   views          
app.use(views('views', {
    root: __dirname + '/views',
    default: 'jade'
}));
//     post   body    
app.use(require('koa-bodyparser')());
//     json    
app.use(json());
//   log      
app.use(logger());

//      ,     generator  
app.use(function *(next){
    //        
    var start = new Date;
    //      next
    yield next;
    //    next    ,       
    var ms = new Date - start;
    console.log('%s %s - %s', this.method, this.url, ms);
});

//         
app.use(require('koa-static')(__dirname + '/public'));

//     
koa.use('/', index.routes(), index.allowedMethods());
koa.use('/users', users.routes(), users.allowedMethods());

//      
app.use(koa.routes());

//     
app.on('error', function(err, ctx){
    log.error('server error', err, ctx);
});

module.exports = app;
いくつかのコメントをすると、app.jsはプロジェクト設定のロジックであることが分かります.
まずルート機能を見てください.
まずルートクラスを導入します.
//   
var index = require('./routes/index');
var users = require('./routes/users');
次にルートを定義します
//     
koa.use('/', index.routes(), index.allowedMethods());
koa.use('/users', users.routes(), users.allowedMethods());

//      
app.use(koa.routes());
この時私達は127..0.1:3000を訪問してルートに着きました./routes/indexの中で127.1.0.1:3000/usersを訪問してルートに着きました.
オン/ロutes/users.js:
var router = require('koa-router')();

router.get('/', function *(next) {
    this.body = 'this a users response!';
});

module.exports = router;
router.get方法の最初のパラメータは'/''であることがわかったが、getの最初のパラメータの中で'/users'が省けますか?実験をします
users.jsの中を:
var router = require('koa-router')();

router.get('/', function *(next) {
    this.body = 'this a users response!';
});

router.get('/test', function *(next) {
    this.body = 'this a users test response!';
});

module.exports = router;
127.1.0.1:3000/users/testにアクセスして、ブラウザにthis a users test reponseを表示します.bingo
前の予想が確認されました.ルートのロジックは私達が新しいjsを作って実現できます.ap.jsコードを修正する必要がなくて、全体のプロジェクト構造も分かります.
ap.jsに現在のプロジェクトのルートクラスを追加します.test.js
var app = require('koa')()
    //      
    , koa = require('koa-router')()
    , logger = require('koa-logger')
    , json = require('koa-json')
    , views = require('koa-views')
    , onerror = require('koa-onerror');

//   
var index = require('./routes/index');
var users = require('./routes/users');
var test = require('./routes/test');

// db
var db = require('./app/models/db/db');

//   views          
app.use(views('views', {
    root: __dirname + '/views',
    default: 'jade'
}));
//     post   body    
app.use(require('koa-bodyparser')());
//     json    
app.use(json());
//   log      
app.use(logger());

//      ,     generator  
app.use(function *(next){
    //        
    var start = new Date;
    //      next
    yield next;
    //    next    ,       
    var ms = new Date - start;
    console.log('%s %s - %s', this.method, this.url, ms);
});

//         
app.use(require('koa-static')(__dirname + '/public'));

//     
koa.use('/', index.routes(), index.allowedMethods());
koa.use('/users', users.routes(), users.allowedMethods());
koa.use('/test', test.routes(), test.allowedMethods());

//      
app.use(koa.routes());

//     
app.on('error', function(err, ctx){
    log.error('server error', err, ctx);
});

module.exports = app;
このように、すべての127..0.1:3000/testからのアドレスはtest.jsにルーティングされます.