這篇文章帶給大家的內容是關於Express4.x中間件特性的介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
Express 應用程式基本上是一系列中間件函數呼叫中間件是在管道中執行的。你可以想像一個送水的真實管道。水從一端泵入,然後在到達目的地之前還會經過各種儀表和閥門。這個比喻中很重要的一部分是順序問題,你把壓力表放在閥門之前和之後的效果是不同的。同樣,如果你有一個向水中註入東西的閥門,這個閥門「下游」的所有東西都會含有這個新添加的原料。在 Express 程式中,透過呼叫app.use 向管道中插入中間件。
在 Express 4.0 之前,這個管道有些複雜,因為必須明確地把路由器連進來。取決於你在哪裡連入路由器,路由的連入可以不按順序來,這使得當你把中間件和路由處理器混在一起時,管道的順序就更不清晰了。在 Express 4.0 中,中介軟體和路由處理器是依照它們的連入順序呼叫的,順序更清晰。
路由處理器(app.get、app.post 等,常被統稱為 app.VERB)可以被視為只處理特定HTTP 謂詞(GET、POST 等)的中間件。同樣,也可以將中間件看作可以處理全部HTTP謂詞的路由處理器(基本上等同於app.all,可以處理任何HTTP 謂詞;對於PURGE 之類特別的謂詞會有細微的差別,但對於普通的謂詞而言,效果是一樣的)。
路由處理器的第一個參數必須是路徑。如果你想讓某個路由符合所有路徑,只需用 /*。中間件也可以將路徑作為第一個參數,但它是可選的(如果忽略這個參數,它會匹配所 有路徑,就像指定了/* 一樣)
路由處理器和中間件的參數中都有回調函數,這個函數有2 個、3 個或4 個參數(技術上也可以有0 或1 個參數,但這些形式沒有意義)。如果有 2 或 3 個參數,前兩個參數是請求和回應對象,第三個參數是 next 函數。如果有 4 個參數,它就變成了錯誤處理中間件,第一個參數變成了錯誤對象,然後依序是請求、回應和 next 對象。如果不呼叫 next(),管道就會被終止,也不會再有處理器或中間件做後續處理。
如果你不呼叫next(),則應該發送一個回應到客戶端(res.send、res.json、res.render 等); 如果你不這樣做,客戶端會被掛起並最終導致超時。如果呼叫了 next(),一般不宜再傳送回應到客戶端。如果你發送了,管道中後續的中間件或路由處理器也會執行,但它們發送的任何回應都會被忽略。
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 輸出 時間 和 //welcome 不會執行 requestUser 中間件的程式碼1552630945571//welcome
以上是Express4.x中間件特性的介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!