中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Express中間件的使用、原理及實現方法

發布時間:2021-07-16 10:32:03 來源:億速云 閱讀:344 作者:chen 欄目:大數據

這篇文章主要介紹“Express中間件的使用、原理及實現方法”,在日常操作中,相信很多人在Express中間件的使用、原理及實現方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Express中間件的使用、原理及實現方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

現在在一些企業里用nodejs做服務端開發已經很普遍了,這里面最火的框架當然要數express了,express將nodejs原生的支持的http模塊進行了簡單封裝,使開發者使用起來得心應手。

這其中最方便的便是express的中間件機制了。在介紹express的中間件的原理和實現之前咱們先看一下express中間件如何使用。

express的中間件機制類似一個漏斗裝置,一個請求到達服務端后,這個請求會被抽象成一個req對象,這個對象會一次進入中間件,在中間件中分別被處理,最后被路由處理函數分發。

如圖:

Express中間件的使用、原理及實現方法

代碼演示如圖:

Express中間件的使用、原理及實現方法

之后啟動這個express服務,不論訪問根路徑 "/"還是"/a",中間件都會被執行,這說明每次請求這個服務,中間件都會被逐一執行。

那這樣做的目的是什么呢?咱們來實現一個需求,需要計算整個網站的pv,也就是整個網站被客戶端請求了多殺次,如果不用中間件會如何做呢?看代碼:

Express中間件的使用、原理及實現方法

如果使用了中間件呢?再看如下代碼:

Express中間件的使用、原理及實現方法

仔細看一下這兩份代碼的區別,第二份明顯簡潔了好多,將計算訪問量的代碼放到中間件中,不需要再在各個路由中分寫再去寫了,提高了復用性,邏輯表達更清晰,易于維護,以上便是express中間件的使用了,這里需要注意的是,中間件的調用順序是從上到下,每個中間件調用完成后必須調用next。

那么中間件機制的原理是什么呢,是如何實現的呢?

看下面一段代碼:

var http = require('http');

function express() {

   var funcs = []; // 待執行的函數數組

   var app = function (req, res) {
       var i = 0;

       function next() {
           var task = funcs[i++];  // 取出函數數組里的下一個函數
           if (!task) {    // 如果函數不存在,return
               return;
           }
           task(req, res, next);   // 否則,執行下一個函數
       }

       next();
   }

   app.use = function (task) {
       funcs.push(task);
   }

   return app;    // 返回實例
}

var app = express();

function middlewareA(req, res, next) {
   console.log('中間件1');
   next();
}

function middlewareB(req, res, next) {
   console.log('中間件2');
   next();
}

function middlewareC(req, res, next) {
   console.log('中間件3');
   next();
}
app.use(middlewareA);
app.use(middlewareB);
app.use(middlewareC);

http.createServer(app).listen('3000', function () {
   console.log('listening 3000....');
});

以上代碼便是express實現中間件機制的核心代碼。

簡單來說,有如下幾點:

  1. express函數調用返回一個app實例

  2. 在express函數內部定義一個數組來存儲中間件函數

  3. 在express函數內部定義一個app函數

  4. 在app函數的內部定義一個變量i保存執行的中間件的位置。

  5. 在app函數中定義一個next方法,這個方法通過i值自增調用中間件

  6. 在app函數內部調用next

  7. 在app函數上定義一個use方法,這個方法可以將中間件函數push進中間件數組中。

這樣的話,express中間件的調用過程其實就是一個非常多的函數嵌套,形似如下代碼:

Express中間件的使用、原理及實現方法

中間件越多嵌套的層級越多。

到此,關于“Express中間件的使用、原理及實現方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伽师县| 屏东县| 平泉县| 吉木萨尔县| 松阳县| 紫金县| 全州县| 龙南县| 潍坊市| 沛县| 家居| 慈利县| 抚州市| 东光县| 玉屏| 卫辉市| 西乌珠穆沁旗| 农安县| 商城县| 安西县| 南汇区| 蓝田县| 准格尔旗| 邳州市| 长宁区| 新丰县| 香格里拉县| 阜新市| 柘荣县| 大田县| 丹东市| 昭苏县| 昌江| 盐边县| 湘潭县| 来凤县| 华安县| 古交市| 平塘县| 丘北县| 乳山市|