node中從express到koa再到koa2的發展歷程


koa是Express的下一代基於Node.js的web框架,目前有1.x和2.0兩個版本。

歷史

1. Express

Express是第一代最流行的web框架,它對Node.js的http進行了封裝,用起來如下:

'use strict'

var express=require('express');
var app=express();

app.get('/',function(req,res){
    res.send('Hello world!');
});

app.listen(3000,function(){
    console.log('Example app listening on port 3000!');
});

//可以在http://127.0.0.1:3000訪問

雖然Express的API很簡單,但是它是基於ES5的語法,要實現異步代碼,只有一個方法:回調。如果異步嵌套層次過多,代碼寫起來就非常難看:

雖然可以用async這樣的庫來組織異步代碼,但是用回調寫異步實在是太痛苦了!

2. koa 1.0

隨着新版Node.js開始支持ES6,Express的團隊又基於ES6的generator重新編寫了下一代web框架koa。和Express相比,koa 1.0使用generator實現異步,代碼看起來像同步的:

var koa=require('koa');
var app=koa();

app.use('/test',function*(){
    yield doReadFile1();
    var data=yield doReadFile2();
    this.body = data;
});

app.listen(3000);
//可以在http://127.0.0.1:3000訪問

用generator實現異步比回調簡單了不少,但是generator的本意並不是異步。Promise才是為異步設計的,但是Promise的寫法……想想就復雜。為了簡化異步代碼,ES7(目前是草案,還沒有發布)引入了新的關鍵字asyncawait,可以輕松地把一個function變為異步模式:

async function () {
    var data = await fs.read('/file1');
}

這是JavaScript未來標准的異步代碼,非常簡潔,並且易於使用。

3. koa2

koa團隊並沒有止步於koa 1.0,他們非常超前地基於ES7開發了koa2,和koa 1相比,koa2完全使用Promise並配合async來實現異步。

koa2的代碼看上去像這樣:

app.use(async (ctx, next) => {
    await next();
    var data = await doReadFile();
    ctx.response.type = 'text/plain';
    ctx.response.body = data;
});

出於兼容性考慮,目前koa2仍支持generator的寫法,但下一個版本將會去掉。

koa2是以后的趨勢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM