真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Express中間件的使用、原理及實現(xiàn)方法

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

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比吳中網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式吳中網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋吳中地區(qū)。費(fèi)用合理售后完善,十年實體公司更值得信賴。

現(xiàn)在在一些企業(yè)里用nodejs做服務(wù)端開發(fā)已經(jīng)很普遍了,這里面最火的框架當(dāng)然要數(shù)express了,express將nodejs原生的支持的http模塊進(jìn)行了簡單封裝,使開發(fā)者使用起來得心應(yīng)手。

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

express的中間件機(jī)制類似一個漏斗裝置,一個請求到達(dá)服務(wù)端后,這個請求會被抽象成一個req對象,這個對象會一次進(jìn)入中間件,在中間件中分別被處理,最后被路由處理函數(shù)分發(fā)。

如圖:

Express中間件的使用、原理及實現(xiàn)方法

代碼演示如圖:

Express中間件的使用、原理及實現(xiàn)方法

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

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

Express中間件的使用、原理及實現(xiàn)方法

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

Express中間件的使用、原理及實現(xiàn)方法

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

那么中間件機(jī)制的原理是什么呢,是如何實現(xiàn)的呢?

看下面一段代碼:

var http = require('http');

function express() {

   var funcs = []; // 待執(zhí)行的函數(shù)數(shù)組

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

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

       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實現(xiàn)中間件機(jī)制的核心代碼。

簡單來說,有如下幾點:

  1. express函數(shù)調(diào)用返回一個app實例

  2. 在express函數(shù)內(nèi)部定義一個數(shù)組來存儲中間件函數(shù)

  3. 在express函數(shù)內(nèi)部定義一個app函數(shù)

  4. 在app函數(shù)的內(nèi)部定義一個變量i保存執(zhí)行的中間件的位置。

  5. 在app函數(shù)中定義一個next方法,這個方法通過i值自增調(diào)用中間件

  6. 在app函數(shù)內(nèi)部調(diào)用next

  7. 在app函數(shù)上定義一個use方法,這個方法可以將中間件函數(shù)push進(jìn)中間件數(shù)組中。

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

Express中間件的使用、原理及實現(xiàn)方法

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

到此,關(guān)于“Express中間件的使用、原理及實現(xiàn)方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當(dāng)前題目:Express中間件的使用、原理及實現(xiàn)方法
網(wǎng)頁URL:http://weahome.cn/article/pdshep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部