Koa框架
一、認識Koa
前面我們已經學習了express,另外一個非常流行的Node Web服務器框架就是Koa。
Koa官方的介紹:
- koa:next generation web framework for node.js;
- koa:node.js的下一代web框架;
事實上,koa是express同一個團隊開發的一個新的Web框架:
- 目前團隊的核心開發者TJ的主要精力也在維護Koa,express已經交給團隊維護了;
- Koa旨在為Web應用程序和API提供更小、更豐富和更強大的能力;
- 相對于express具有更強的異步處理能力(后續我們再對比);
- Koa的核心代碼只有1600+行,是一個更加輕量級的框架,我們可以根據需要安裝和使用中間件;
事實上學習了express之后,學習koa的過程是很簡單的;
二、Koa初體驗
我們來體驗一下koa的Web服務器
koa注冊的中間件提供了兩個參數:
ctx:上下文(Context)對象;
koa并沒有像express一樣,將req和res分開,而是將它們作為ctx的屬性;
ctx代表依次請求的上下文對象;
ctx.request:獲取請求對象;
ctx.response:獲取響應對象;
next:本質上是一個dispatch,類似于之前的next;
后續我們學習Koa的源碼,來看一下它是一個怎么樣的函數;
三、Koa中間件
koa通過創建的app對象,注冊中間件只能通過use方法:
- Koa并沒有提供methods的方式來注冊中間件;
- 也沒有提供path中間件來匹配路徑;
但是真實開發中我們如何將路徑和method分離呢?
- 方式一:根據request自己來判斷;
- 方式二:使用第三方路由中間件;
四、路由的使用
koa官方并沒有給我們提供路由的庫,我們可以選擇第三方庫:koa-router
我們可以先封裝一個 user.router.js 的文件:
在app中將router.routes()注冊為中間件:
注意:allowedMethods用于判斷某一個method是否支持:
- 如果我們請求 get,那么是正常的請求,因為我們有實現get;
- 如果我們請求 put、delete、patch,那么就自動報錯:Method Not Allowed,狀態碼:405;
- 如果我們請求 link、copy、lock,那么久自動報錯:Not Implemented,狀態碼:501;
五、參數解析:params - query
六、參數解析:json && x-www-form-urlencoded
安裝依賴: npm install koa-bodyparser;
使用 koa-bodyparser的中間件;
七、參數解析:form-data
八、Multer上傳文件
九、數據的響應
請求狀態:status
十、靜態服務器
koa并沒有內置部署相關的功能,所以我們需要使用第三方庫:
npm install koa-static
部署的過程類似于express:
十一、錯誤處理
十二、koa和express對比
在學習了兩個框架之后,我們應該已經可以發現koa和express的區別:
- express是完整和強大的,其中幫助我們內置了非常多好用的功能;
- koa是簡潔和自由的,它只包含最核心的功能,并不會對我們使用其他中間件進行任何的限制。甚至是在app中連最基本的get、post都沒有給我們提供;我們需要通過自己或者路由來判斷請求方式或者其他功能;
但是他們的中間件事實上,它們的中間件的執行機制是不同的,特別是針對某個中間件中包含異步操作時;
所以,接下來,我們再來研究一下express和koa中間件的執行順序問題;
我通過一個需求來演示所有的過程:
假如有三個中間件會在一次請求中匹配到,并且按照順序執行;
我希望最終實現的方案是:
實現方案:
2. Express同步數據的實現;
Koa同步數據的實現;
Koa異步數據的實現;
注意:
在koa中,next()返回的是一個promise對象,所以可以通過await next()來實現需求。
但是在express中,next()只是一個普通的函數,所以使用await next()無效!!!
總結
- 上一篇: 智能车的转弯部分_江西智能搬运平板车铁路
- 下一篇: Mongodb 账户权限配置