Dart-Aqueduct框架開發(fā)(五)

上一篇

聲明:本文首發(fā)于微信訂閱號:Dart客棧,微信后臺回復(fù)05165獲取本篇源碼
文章為原創(chuàng),如需轉(zhuǎn)載請注明出處,并告知作者,謝謝!

1.介紹

這一節(jié)我們來學習一下Controller處理請求

2.什么是控制器Controller

Aqueduct框架中,我們主要使用Controller進行對請求和響應(yīng)的處理,例如:我們可以使用控制器返回文章列表,也可以使用控制器驗證請求是否通過,而這些控制器可以連在一起,構(gòu)建成一個通道,當前一個控制器驗證不通過時,這條請求將會被攔截掉,可以用下圖來展示:


那么在Aqueduct控制器A控制器B是什么呢?

- 控制器A

用于驗證請求的內(nèi)容是否通過,如果不通過,則不給繼續(xù)請求,直到通過,才能給繼續(xù)請求,我們可以繼承Controller實現(xiàn)

class ValidateController extends Controller {

  @override
  FutureOr<RequestOrResponse> handle(Request request) async {
    final headers = request.raw.headers;
    final a = headers.value('a');
    if (a == 'a') {
      return request;
    }
    return Response.unauthorized();
  }
}

這里我們判斷,當請求頭有{'a':'a'}的時候才給請求,即返回request,不然給個沒有授權(quán)的狀態(tài)碼401告訴客戶端,然后添加到我們之前/hello接口中,在channel.dart文件,添加下面代碼

@override
  Controller get entryPoint {
//...
  router
        .route('/hello')
//new
        .link(() => ValidateController())
//new
        .linkFunction((request) async {
      return Response.ok({'data': 'Hello World'});
    });
//...
}

可以看到我們在指定path之后,可以無限加Controller,無限加Function,來控制請求,但必須要注意,在最末尾的那個控制器,必須要響應(yīng)請求,下面來演示一下使用瀏覽器進行請求


可以看到不給訪問了,需要打錢添加請求頭才能訪問內(nèi)容,這個時候,就需要用到postman,讓我們添加請求頭再嘗試一下看看

果然,打錢添加請求頭就是不一樣,5ms就給我們看到了想要看到的內(nèi)容??

  • 控制器B
    用于響應(yīng)內(nèi)容,目前我們使用linkFunction作為控制器B,現(xiàn)在,我們把返回{'data':'Hello World'}這個代碼移動到新建的SayHelloController
class SayHelloController extends Controller{

  @override
  FutureOr<RequestOrResponse> handle(Request request) {
    return Response.ok({'data': 'Hello World'});
  }
}

然后修改一下路由的部分代碼,在channel.dart文件下

  @override
  Controller get entryPoint {
    router
        .route('/hello')
        .link(() => ValidateController())
// edit
//        .linkFunction((request) async {
//      return Response.ok({'data': 'Hello World'});
//    });
        .link(() => SayHelloController());
// edit
}

可以看到,這樣所有的請求和響應(yīng)都放到Controller里面了,這個也是大部分后端請求和響應(yīng)的風格.

總結(jié):從上面的內(nèi)容可以得出

  1. 一個請求到來可以鏈接多個控制器,并前一個控制器可以攔截掉后一個控制器的處理
  2. 控制器返回Request類型的對象,說明將請求交給下一個控制器
  3. 控制器返回Response類型對象,說明要自己處理或者攔截,

以上就是這一節(jié)的所有內(nèi)容,如果小伙伴們覺得有收獲,不妨點一下點個贊,讓我能看到你跟我一起學習Dart服務(wù)器,也是對我寫作的一種肯定??!

下一篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,621評論 1 32
  • 一、Uri Uri 類 提供了 編碼和解碼 URI(URL) 字符的功能。 這些函數(shù)處理 URI 特殊的字符,例如...
    小哥_xiaoge閱讀 4,395評論 1 0
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中。。。 其實如果沒有APIManager這一層是沒法使用delegate的,畢竟多個單...
    yhtang閱讀 5,466評論 1 23
  • 小時候 不曾知道 長大后能遇見你。 ——【渡】記二零一八年九月十二日摘豐子愷語錄之練字時光。
    莊周夢婷閱讀 218評論 0 2
  • 關(guān)于這個問題,不同的作者定能給出不同的答案。我的坦誠的回答便是:寫作于我來說是很有趣的事情,就像你們喜歡逛街喜歡麻...
    念舊成癮閱讀 840評論 0 12

友情鏈接更多精彩內(nèi)容