ExpressJS - 中介軟體



中介軟體函式是可以訪問請求物件 (req)響應物件 (res)和應用程式請求-響應週期中下一個中介軟體函式的函式。這些函式用於修改reqres物件,以執行解析請求主體、新增響應頭等任務。

這是一箇中間件函式實際應用的簡單示例:

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

//Simple request time logger
app.use(function(req, res, next){
   console.log("A new request received at " + Date.now());
   
   //This function call is very important. It tells that more processing is
   //required for the current request and is in the next middleware
   function route handler.
   next();
});

app.listen(3000);

上述中介軟體會在伺服器上的每個請求時被呼叫。因此,在每次請求後,我們將在控制檯中獲得以下訊息:

A new request received at 1467267512545

要將其限制到特定路由(及其所有子路由),請將該路由作為app.use()的第一個引數提供。例如,

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

//Middleware function to log request protocol
app.use('/things', function(req, res, next){
   console.log("A request for things received at " + Date.now());
   next();
});

// Route handler that sends the response
app.get('/things', function(req, res){
   res.send('Things');
});

app.listen(3000);

現在,每當您請求'/things'的任何子路由時,它才會記錄時間。

中介軟體呼叫順序

Express 中中介軟體最重要的方面之一是它們在檔案中編寫/包含的順序;還需要考慮它們執行的順序,前提是路由也匹配。

例如,在以下程式碼片段中,第一個函式先執行,然後是路由處理程式,最後是結束函式。此示例總結了如何在路由處理程式之前和之後使用中介軟體;以及如何將路由處理程式本身用作中介軟體。

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

//First middleware before response is sent
app.use(function(req, res, next){
   console.log("Start");
   next();
});

//Route handler
app.get('/', function(req, res, next){
   res.send("Middle");
   next();
});

app.use('/', function(req, res){
   console.log('End');
});

app.listen(3000);

執行此程式碼後訪問'/'時,我們收到響應為Middle,並在控制檯中顯示:

Start
End

下圖總結了我們關於中介軟體的學習內容:

Middleware

現在我們已經介紹瞭如何建立自己的中介軟體,讓我們討論一些最常用的社群建立的中介軟體。

第三方中介軟體

Express 的第三方中介軟體列表可在此處獲得。以下是一些最常用的中介軟體;我們還將學習如何使用/掛載這些中介軟體:

body-parser

此中介軟體用於解析帶有有效負載的請求的主體。要掛載 body-parser,我們需要使用npm install --save body-parser 進行安裝,並將其包含在 index.js 中:

var bodyParser = require('body-parser');

//To parse URL encoded data
app.use(bodyParser.urlencoded({ extended: false }))

//To parse json data
app.use(bodyParser.json())

要檢視 body-parser 的所有可用選項,請訪問其 github 頁面。

cookie-parser

它解析Cookie頭並使用 cookie 名稱作為鍵填充 req.cookies 物件。要掛載 cookie-parser,我們需要使用 npm install --save cookie-parser 進行安裝,並將其包含在 index.js 中:

var cookieParser = require('cookie-parser');
app.use(cookieParser())

express-session

它使用給定選項建立會話中介軟體。我們將在 Session 部分討論其用法。

ExpressJS 中還有許多其他第三方中介軟體。但是,這裡我們只討論了一些重要的中介軟體。

廣告

© . All rights reserved.