koa --- [MVC实现之四]Router、Controller、Service的实现
生活随笔
收集整理的這篇文章主要介紹了
koa --- [MVC实现之四]Router、Controller、Service的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
說明
- 上一篇: [MVC實現之三]
- 上一篇實現了,Router層、Controller層、Service層的基本原則,并且成功的通過Mar類來傳遞這些層級之間需要的參數.
- 這一篇主要是通過業務層面來具體實現:
- Router層:監聽頁面的路由,并調用Controller層的路由處理函數
- Controller層:給Router層提供服務,調用Service層提供的數據處理.
開始
打開瀏覽器訪問: localhost:3000
- 此時并沒有,路由處理函數.
- 栗子: 返回一條數據
Router層
- 思路:
1.在該層調用koa-router
2.建立路由和路由處理函數的聯系
3.掛載路由
4.定義規則:將this.koa = new koa(conf)改為this.$app = new koa(conf),使參數更具有語義(是一個koa的實例).
- 此時,Router層,成功的利用koa-router創建并掛載路由
- 下面只需在Controller類中寫入index方法.
- koa-router,在監聽路由的時候,會傳入一個ctx和next對象
Controller層
- 在此層寫入一個index方法,并使用ctx返回一個對象
此時http://localhost:3000會返回如下信息:
- 調用Service層的異步方法
- 重新刷新http://localhost:3000 會報錯,原因是service沒有定義
- 仔細讀函數會發現:
-3.1 在JavaScript中實際上是沒有類的概念,類只不過是一個語法糖
-3.2 看以下代碼
得益于以上,產生靈感如下:
改進Router層
class Controller {constructor(app) {const { service } = app;console.log('service: ', service.test());// 將service掛載Controller的原型上Controller.prototype = service;}test() {return `Controller for Router`}async index(ctx) {const service = Controller.prototype.servicectx.body = await service.index();} }到這里,基本滿足了設計初衷:
Service層
- 添加index層方法
總結
- 這一篇實現了Router、Controller、Service層內的具體通信
- 下一篇將會加入Model層.并對此系列進行總結
總結
以上是生活随笔為你收集整理的koa --- [MVC实现之四]Router、Controller、Service的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 语料库与语言知识库
- 下一篇: s3c2440移植MQTT