溫馨提示×

溫馨提示×

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

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

Express4.x中間件特性有什么

發(fā)布時(shí)間:2020-12-03 09:28:01 來源:億速云 閱讀:128 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)Express4.x中間件特性有什么的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

Express 應(yīng)用程序基本上是一系列中間件函數(shù)調(diào)用中間件是在管道中執(zhí)行的。你可以想象一個(gè)送水的真實(shí)管道。水從一端泵入,然后在到達(dá)目的地之前還會(huì)經(jīng)過各種儀表和閥門。這個(gè)比喻中很重要的一部分是順序問題,你把壓力表放在閥門之前和之后的效果是不同的。同樣,如果你有個(gè)向水中注入什么東西的閥門,這個(gè)閥門“下游”的所有東西都會(huì)含有這個(gè)新添加的原料。在 Express 程序中,通過調(diào)用app.use 向管道中插入中間件。

在 Express 4.0 之前,這個(gè)管道有些復(fù)雜,因?yàn)楸仨氾@式地把路由器連進(jìn)來。取決于你在哪里連入路由器,路由的連入可以不按順序來,這使得當(dāng)你把中間件和路由處理器混在一起時(shí),管道的順序就更不清晰了。在 Express 4.0 中,中間件和路由處理器是按它們的連入順序調(diào)用的,順序更清晰。

路由處理器(app.get、app.post 等,經(jīng)常被統(tǒng)稱為 app.VERB)可以被看作只處理特定HTTP 謂詞(GET、POST 等)的中間件。同樣,也可以將中間件看作可以處理全部 HTTP謂詞的路由處理器(基本上等同于 app.all,可以處理任何 HTTP 謂詞;對(duì)于 PURGE 之類特別的謂詞會(huì)有細(xì)微的差別,但對(duì)于普通的謂詞而言,效果是一樣的)。

路由處理器的第一個(gè)參數(shù)必須是路徑。如果你想讓某個(gè)路由匹配所有路徑,只需用 /*。 中間件也可以將路徑作為第一個(gè)參數(shù),但它是可選的(如果忽略這個(gè)參數(shù),它會(huì)匹配所 有路徑,就像指定了 /* 一樣)

路由處理器和中間件的參數(shù)中都有回調(diào)函數(shù),這個(gè)函數(shù)有 2 個(gè)、3 個(gè)或 4 個(gè)參數(shù)(從技術(shù)上講也可以有 0 或 1 個(gè)參數(shù),但這些形式?jīng)]有意義)。如果有 2 個(gè)或 3 個(gè)參數(shù),頭兩個(gè)參數(shù)是請(qǐng)求和響應(yīng)對(duì)象,第三個(gè)參數(shù)是 next 函數(shù)。如果有 4 個(gè)參數(shù),它就變成了錯(cuò)誤處理中間件,第一個(gè)參數(shù)變成了錯(cuò)誤對(duì)象,然后依次是請(qǐng)求、響應(yīng)和 next 對(duì)象。如果不調(diào)用 next(),管道就會(huì)被終止,也不會(huì)再有處理器或中間件做后續(xù)處理。

如果你不調(diào)用 next(),則應(yīng)該發(fā)送一個(gè)響應(yīng)到客戶端(res.send、res.json、res.render 等); 如果你不這樣做,客戶端會(huì)被掛起并最終導(dǎo)致超時(shí)。如果調(diào)用了 next(),一般不宜再發(fā)送響應(yīng)到客戶端。如果你發(fā)送了,管道中后續(xù)的中間件或路由處理器還會(huì)執(zhí)行,但它們發(fā)送的任何響應(yīng)都會(huì)被忽略。

var express = require('express')
var app = express()

var requestTime = function (req, res, next) {
  req.requestTime = Date.now()
  console.log(req.requestTime );
  next()
}
var requestUser = function (req, res, next) {
  console.log('welcome');
  next()
}

app.use(requestTime)
app.get('/', function (req, res) {
  console.log('//welcome');
  var responseText = 'Hello World!<br>'
  responseText += '<small>Requested at: ' + req.requestTime + '</small>'
  res.send(responseText)
})
app.use(requestUser)
app.listen(3000)

訪問 127.0.0.1:3000 輸出 時(shí)間 和 //welcome 不會(huì)執(zhí)行 requestUser  中間件的代碼1552630945571//welcome

感謝各位的閱讀!關(guān)于Express4.x中間件特性有什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI