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