Express.js 中的中間件可能聽起來有點技術性,但是一旦掌握了它的竅門,它就非常簡單了。這就像比賽中的進站一樣——請求進來,在到達終點線(您的路線處理程序)之前,他們會在不同的點停下來進行修改、檢查或記錄。
在本文中,我們將詳細介紹什麼是中間件、如何使用它,並向您展示一些現實生活中的範例。讓我們盡可能讓它簡單實用!
想像一下對伺服器的每個請求都是一輛車在公路旅行。中間件就像每輛車在到達目的地之前必須經過的一系列檢查站。在每個檢查點(中間件),都會發生一些事情:也許汽車被洗了,也許它撿起了一些零食,或者也許它被告知掉頭回家!
用編碼術語來說,中間件只是位於請求和回應之間的函數。它可以:
這是一個超級基本的範例:
app.use((req, res, next) => { console.log('A request came in!'); next(); // Pass the baton to the next middleware });
每次要求到達您的伺服器時,它都會記錄一條訊息,然後將控制權傳遞給下一個中間件或路由處理程序。
Express 隨附一些內建的中間件功能,讓生活變得更輕鬆。以下是您可能會一直使用的幾個:
1- express.json():這個可以幫助您處理傳入的 JSON 資料。
app.use(express.json());
2- express.static():想要提供圖片或 CSS 等靜態檔案?這個中間件可以滿足您的需求。
app.use(express.static('public'));
3- express.urlencoded():它有助於解析透過 HTML 表單傳送的資料。
app.use(express.urlencoded({ extended: true }));
您也可以建立自己的中間件來處理特定任務,例如登入或檢查使用者是否登入。
範例:簡單記錄器
app.use((req, res, next) => { console.log(`Request Method: ${req.method}, URL: ${req.url}`); next(); });
每次要求到達您的伺服器時,都會記錄 HTTP 方法和 URL。它非常適合追蹤您的應用程式發生的情況。
範例:驗證檢查
const checkAuth = (req, res, next) => { if (!req.headers.authorization) { return res.status(403).send('You shall not pass! (Unauthorized)'); } next(); // Allow the request to continue if authorized }; app.use(checkAuth);
在這裡,如果請求沒有授權標頭,它將被阻止並顯示「403 Forbidden」訊息。否則,它就會被傳遞。
不想自己寫所有內容嗎?好消息:Express 可與大量第三方中介軟體搭配使用,為您處理任務。
範例:摩根用於日誌記錄
morgan 是一種流行的記錄請求的中間件。使用方法:
1- 安裝它:
npm install morgan
2- 將其添加到您的應用程式中:
const morgan = require('morgan'); app.use(morgan('dev'));
現在,每次收到請求時,您都會在終端機中看到一個漂亮的格式化日誌。
範例:跨來源請求的 cors
cors 中間件可讓您的應用程式處理來自其他網域的請求(在建立 API 時非常有用)。
1- 安裝它:
npm install cors
2- 使用它:
const cors = require('cors'); app.use(cors());
就是這樣!現在您的應用程式可以毫不費力地處理跨來源請求。
您不必總是將中間件套用至應用程式中的每個路由。有時,您只希望它在特定的上運行。
app.get('/dashboard', checkAuth, (req, res) => { res.send('Welcome to the Dashboard'); });
這裡,checkAuth 中間件僅在有人嘗試存取 /dashboard 路由時運行。如果沒有獲得授權,他們就不能進入!
有時事情會出錯。這就是錯誤處理中間件派上用場的地方。它看起來有點不同——它有四個參數:err、req、res 和 next。
app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('Something went wrong!'); });
此中間件捕獲錯誤並發回友善的「500 內部伺服器錯誤」訊息。
中間件就像 Express.js 的瑞士軍刀。它可以幫助您管理請求、處理錯誤以及新增日誌記錄或身份驗證等很酷的功能。無論您是使用內建選項、自己編寫選項還是引入第三方工具,中間件都能讓您的應用程式保持模組化且易於管理。
感謝您的閱讀,祝您編碼愉快! ?
以上是了解 Express.js 和 Node.js 中的中間件 - 第 9 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!