1 回答

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
koa2 完全拋棄了generator和co的做法,而是使用async/await來做異步開發(fā)。
## 不同
1. koa和express在表現(xiàn)上的一點(diǎn)不同是采用ctx一個(gè)參數(shù)來調(diào)用中間件,而不是express的req, res。
其實(shí)在使用上還是個(gè)人認(rèn)為是更方便了的。
2. 然后是在中間件連接的方式上有所不同。
express的設(shè)計(jì)是串聯(lián)的,設(shè)計(jì)思路超級(jí)簡(jiǎn)潔。
koa的某一個(gè)中間件可以自行選擇之后中間件的執(zhí)行位置的。
## 舉例
比如一個(gè)服務(wù)器處理時(shí)間/日志的中間件的開發(fā):
express:request
進(jìn)來,記錄時(shí)間到request._startTime上。綁定一個(gè)函數(shù)到response的'end','finish'以及
response.socket的'error','close'事件上。那個(gè)函數(shù)會(huì)用當(dāng)前時(shí)間和startTime做差,算出運(yùn)行時(shí)間。
koa2:
```js
const xTime = async (ctx,next)=>{
let start = new Date
await next()
ctx.set('X-Response-Time', (new Date) - start) + 'ms')
}
```
這是在功能開發(fā)上,在錯(cuò)誤處理上的友好度就更高了。
沒有特意抹黑express的中間件開發(fā),那個(gè)express版的計(jì)時(shí)器是express自帶的服務(wù)器日志中間件morgan的實(shí)現(xiàn)。
## 社區(qū)
express的社區(qū)還是大。
koa本來就小,還被從koa1轉(zhuǎn)koa2一折騰,就更小了。
而現(xiàn)在koa2還在alpha版,koa及其插件的開發(fā)速度比較沒有保證。
你找到一個(gè)中間件,如果是express的,得轉(zhuǎn)過來。如果是koa的,一般也得再轉(zhuǎn)一次。
比如我使用的passportjs,github有koa版koa-passport,就分koa1版本和koa2版本的,選擇時(shí)得注意一下。
## 個(gè)人評(píng)價(jià)
koa2好用,設(shè)計(jì)上的確有優(yōu)勢(shì)。優(yōu)勢(shì)不在能實(shí)現(xiàn)更強(qiáng)的功能,而是可以更簡(jiǎn)單地完成功能。
koa2社區(qū)遠(yuǎn)不如express,原因之一是~~因?yàn)閗oa2的正式版離發(fā)行估計(jì)還得3~6個(gè)月。~~koa的正式版是koa1。
koa1在思想上與koa2是一致的,但是koa2的實(shí)現(xiàn)更漂亮。
有koa1到koa2的中間件封裝函數(shù)`koa-convert`。
- 1 回答
- 0 關(guān)注
- 621 瀏覽
添加回答
舉報(bào)