koa --- [MVC实现之二]Controller层的实现
生活随笔
收集整理的這篇文章主要介紹了
koa --- [MVC实现之二]Controller层的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[MVC實現之一]傳送門
https://blog.csdn.net/piano9425/article/details/103362966
Router層
- router這一層,不做業務處理,僅僅只是將路由和路由的處理函數結合起來.
- 路由的處理函數由Controller層實現
- 改進目錄結構如下(實際上新建了controller文件夾及其內部子文件,mar.js)
Router層的改變
- 我們希望routes下的index.js結構如下
"get /": indexHandler;
"get /detail: detailHandler" - 改成如下:
注:
1.此時導出的是一個函數,而不是一個對象
2.現在已經有了路由,以及路由的處理函數的名稱.
3.路由的邏輯將在Controller層內完成
Controller實現路由邏輯
- /mar/controller/home.js
注:
1.實現的邏輯很簡單:根據請求的URL返回內容給瀏覽器渲染
2.現在有了,路由,路由的處理函數,路由與路由處理函數的對應.
3.下面只需將controller文件夾下的函數掛載到app上即可.
4.app是函數的實例
構造mar類
思路:
1.希望通過如下方式啟動
2.mar類需要實現以下幾點
- 將koa的方法掛載到實例的$app屬性上:this.$app = new koa()
- 將controller掛載到實例的controller上:this.controller = initController()
- 將Router掛載到實例的router上:this.router = Router()
- 返回一個啟動函數start
此時,需要在 mar-load中定義initController,功能如下:
1.調用load函數,讀取controller下的文件
2.對應讀取出來的文件的鍵和值
- 此時,只能監聽 user 目錄下的路由.
- 使用console.log大法,在initRouter里面,將load('router')的結果打印出來
發現原因:
1./mar/routes/index.js導出的是一個函數,而/mar/routes/user.js導出的是一個對象
2.故后面Object.keys()方法是無法遍歷’index.js’中的路由的
3.需要改進initRouter方法如下
注:
1.此時在/mar/mar.js的構造函數中,應該將當前的this傳入,即 ‘this.router = initRouter(this)’;
2.this代表的是使用new mar()生成的實例
至此,Controller層就實現了
總結
以上是生活随笔為你收集整理的koa --- [MVC实现之二]Controller层的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: koa --- [MVC实现之一]自定
- 下一篇: STM32 HAL库 .c/.h 文件介