首頁  >  文章  >  web前端  >  理解並實作 Express.js 中的中間件

理解並實作 Express.js 中的中間件

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-09-22 06:21:451075瀏覽

Entendendo e Implementando Middlewares no Express.js

Express.js 是使用 Node.js 建立 Web 應用程式的最受歡迎的框架之一。它有助於創建 RESTful API,並允許您以模組化方式建立應用程式。 Express.js 中的主要概念之一是使用中間件。在本文中,我們將了解什麼是中間件、它如何運作以及如何創建自己的中間件。

什麼是中間件?

中間件是可以存取請求物件 (req)、回應物件 (res) 和 next() 函數的函數。他們可以修改請求和/或回應物件並控制請求-回應週期。中間件可以做很多事情,例如:

  • 運行任何程式碼。
  • 修改請求和回應。
  • 關閉請求-回應週期。
  • 呼叫鏈中的下一個中間件。

Express.js 中中介軟體的基本簽章是:

function middleware(req, res, next) {
    // Lógica do middleware
    next(); // Chama o próximo middleware
}

中介軟體類型

在 Express 中,我們可以找到幾種類型的中間件:

  1. 應用程式中間件:這些是影響整個應用程式或一組路由的中間件。
  2. 路由中間件:特定於一個或多個路由。
  3. 整合中間件:如express.json()和express.static(),由Express直接提供。
  4. 第三方中間件:例如 morgan 或 cors,您可以安裝它們來擴充 Express 的功能。

中間件如何運作?

當收到請求時,它會通過「中間件鏈」。每個中間件都可以處理請求,並在執行結束時決定是否呼叫下一個中間件(使用 next() 函數)或完成回應。

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

// Middleware global
app.use((req, res, next) => {
    console.log('Request Type:', req.method);
    next();
});

// Middleware específico para a rota /user
app.use('/user', (req, res, next) => {
    console.log('Middleware para /user');
    next();
});

app.get('/user', (req, res) => {
    res.send('Página do Usuário');
});

app.listen(3000, () => {
    console.log('Servidor rodando na porta 3000');
});

建立自訂中間件

除了 Express 或第三方提供的中間件之外,您還可以建立自己的中間件來處理特定功能,例如驗證、日誌或資料操作。

簡單驗證中間件範例:

function autenticar(req, res, next) {
    const token = req.header('Authorization');
    if (!token) {
        return res.status(401).send('Acesso negado. Token não fornecido.');
    }
    try {
        // Lógica para validar o token
        next(); // Continua para o próximo middleware
    } catch (err) {
        res.status(400).send('Token inválido.');
    }
}

app.use(autenticar); // Aplica o middleware para todas as rotas

第三方中介軟體

Express 也允許使用第三方中間件,可以透過 npm 安裝。一些最受歡迎的是:

  • morgan:用於 HTTP 日誌。
  • 頭盔:為了安全,設定保護性HTTP標頭。
  • cors:啟用CORS(跨來源資源共享)。

安裝與使用 Morgan:

npm install morgan
const morgan = require('morgan');

// Middleware de log
app.use(morgan('tiny'));

app.get('/', (req, res) => {
    res.send('Hello World');
});

中介軟體順序

定義中間件的順序很重要,因為它們按照註冊的順序執行。例如,如果您在需要驗證的路由之後定義驗證中間件,則它將不會為該路由執行。

app.use(express.json()); // Middleware para parsear JSON

app.post('/secure-data', autenticar, (req, res) => {
    res.send('Acesso a dados seguros');
});

完成中介軟體

如果中間件不呼叫 next() 函數,它將中斷請求-回應週期。如果您想在中間件本身內完成請求,例如在身份驗證檢查中,這可能很有用:

function autenticar(req, res, next) {
    if (!req.header('Authorization')) {
        return res.status(403).send('Não autorizado');
    }
    next();
}

結論

中間件是使用 Express.js 建立應用程式的重要組成部分,提供了極大的靈活性和模組化。透過掌握中間件的使用,您將能夠有效地建立 API、重複使用程式碼並以簡單且可擴展的方式添加身份驗證、安全性和資料操作等功能。

如果您尚未在專案中使用自訂中間件,請從簡單的東西開始,例如日誌記錄或身份驗證中間件,並體驗 Express.js 提供的模組化和靈活性!


你喜歡這篇文章嗎?不要忘記與其他開發者分享!

以上是理解並實作 Express.js 中的中間件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn