這篇文章主要介紹“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服務(wù),不論訪問根路徑 "/"還是"/a",中間件都會被執(zhí)行,這說明每次請求這個服務(wù),中間件都會被逐一執(zhí)行。
那這樣做的目的是什么呢?咱們來實現(xiàn)一個需求,需要計算整個網(wǎng)站的pv,也就是整個網(wǎng)站被客戶端請求了多殺次,如果不用中間件會如何做呢?看代碼:
如果使用了中間件呢?再看如下代碼:
仔細(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ī)制的核心代碼。
簡單來說,有如下幾點:
express函數(shù)調(diào)用返回一個app實例
在express函數(shù)內(nèi)部定義一個數(shù)組來存儲中間件函數(shù)
在express函數(shù)內(nèi)部定義一個app函數(shù)
在app函數(shù)的內(nèi)部定義一個變量i保存執(zhí)行的中間件的位置。
在app函數(shù)中定義一個next方法,這個方法通過i值自增調(diào)用中間件
在app函數(shù)內(nèi)部調(diào)用next
在app函數(shù)上定義一個use方法,這個方法可以將中間件函數(shù)push進(jìn)中間件數(shù)組中。
這樣的話,express中間件的調(diào)用過程其實就是一個非常多的函數(shù)嵌套,形似如下代碼:
中間件越多嵌套的層級越多。
到此,關(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