在 Node.js 中新增 Express 中介軟體


應用中的每個請求都會透過 Express 中的多箇中間件。如果其中一箇中間件返回響應,則請求處理在此結束。如果任何中介軟體想要將請求傳遞給下一個中介軟體,它會在其函式呼叫的末尾使用 next() 函式呼叫。

HTTP 請求 -> 中介軟體 (req, resp, next) -> 中介軟體 (req, res, next) -> HTTP 響應 (res.send())。

const http = require('http');
const express = require('express');
const app = express();
app.use((req, res,next)=>{
   console.log('first middleware');
});
const server = http.createServer(app);
server.listen(3000);

中介軟體是使用 use 函式新增的,如上所示。Use() 函式基本上接收三個引數:請求、響應和 next() 函式。

use() 函式新增到伺服器建立函式之前。現在,新增第二個中介軟體:

執行應用:

開啟瀏覽器並導航到 localhost:3000

在終端控制檯中,我們將看到日誌訊息:

在第一個中介軟體中,我們使用了 next() 函式呼叫來將 HTTP 請求傳遞給呼叫棧中的下一個中介軟體。中介軟體通常按照它們在檔案中定義的順序工作。

從中介軟體傳送響應

Express 提供了一個 send() 函式來返回任何型別的響應,例如 html、文字等。我們也可以繼續使用舊的 write 函式。在這裡,我們不需要設定 header,Express 會自動完成。

app.use((req, res,next)=>{
   console.log('second middleware');
   res.send('<h1> Hello Tutorials Point </h1>');
});

Nodemon 將在程式碼更改時自動重啟應用程式:

在 Express.js 中,預設的 content type 為 text/html。我們可以使用 response.setHeader() 函式覆蓋預設的 header 值。

如果我們在第一個中介軟體中刪除 next() 函式呼叫:

const http = require('http');
const express = require('express');
const app = express();
app.use((req, res,next)=>{
   console.log('first middleware');
   //next();
   res.send('<h1> first midleware: Hello Tutorials Point </h1>');
});
app.use((req, res,next)=>{
   console.log('second middleware');
   res.send('<h1> second middleware: Hello Tutorials Point </h1>');
});
const server = http.createServer(app);
server.listen(3000);

注意,我們註釋掉了第一個中介軟體中的 next() 函式呼叫

因此,我們的 HTTP 請求將不會到達第二個中介軟體,我們只會看到第一個中介軟體的響應。

更新於:2020年5月13日

333 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.