最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Express中全局中間件與局部中間件的使用

 更新時間:2024年12月11日 10:54:12   作者:Peter-Lu  
本文介紹了Express框架中的全局中間件與局部中間件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Express 是 Node.js 生態(tài)系統(tǒng)中最流行的 Web 應(yīng)用框架之一,提供了簡潔的 API,便于開發(fā)者創(chuàng)建 Web 應(yīng)用程序和 RESTful API。本文將詳細介紹 Express 中的全局中間件與局部中間件,幫助開發(fā)者更好地理解兩者的區(qū)別、用法以及在實際項目中的應(yīng)用場景。

一、Express 中的中間件概述

1. 什么是中間件?

中間件(middleware)是 Express 應(yīng)用程序中處理請求的函數(shù),通常用于處理 HTTP 請求和響應(yīng)的過程。中間件可以訪問請求對象(req)、響應(yīng)對象(res)以及應(yīng)用程序的下一個中間件函數(shù)。其主要作用是處理請求數(shù)據(jù)、進行身份驗證、記錄日志、處理錯誤等。

中間件可以通過以下三種方式應(yīng)用:

  • 全局中間件:在應(yīng)用程序中全局生效,所有請求都會經(jīng)過該中間件。
  • 局部中間件:只作用于特定的路由或請求。
  • 錯誤處理中間件:專門用于捕獲和處理錯誤。

2. Express 中的中間件執(zhí)行順序

在 Express 中,中間件是按照定義的順序依次執(zhí)行的。當(dāng)一個中間件處理完畢后,可以通過調(diào)用 next() 函數(shù)將控制權(quán)傳遞給下一個中間件。如果不調(diào)用 next(),則請求將會掛起,后續(xù)的中間件或路由不會被執(zhí)行。

二、全局中間件的作用與用法

1. 什么是全局中間件?

全局中間件是指在應(yīng)用程序啟動時注冊的中間件,這些中間件對所有路由和請求生效。通常用于一些通用的處理邏輯,比如解析請求體、處理靜態(tài)文件、添加全局響應(yīng)頭等。

2. 常見的全局中間件示例

以下是一些常用的全局中間件示例:

(1) 解析 JSON 請求體的中間件

Express 內(nèi)置了 express.json() 中間件,用于解析請求體中的 JSON 數(shù)據(jù):

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

// 全局解析 JSON 請求體
app.use(express.json());

app.post('/data', (req, res) => {
  res.send(req.body);  // 輸出解析后的 JSON 數(shù)據(jù)
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

(2) 日志記錄中間件

開發(fā)者可以使用第三方中間件如 morgan 來記錄 HTTP 請求日志:

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

// 全局日志記錄中間件
app.use(morgan('combined'));

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

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

(3) 靜態(tài)文件處理中間件

使用 express.static() 處理靜態(tài)文件請求:

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

// 全局處理靜態(tài)文件
app.use(express.static('public'));

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

在這個例子中,public 目錄下的文件可以通過 / 直接訪問,例如 public/index.html 可以通過 http://localhost:3000/index.html 訪問。

3. 全局中間件的使用場景

全局中間件通常用于以下場景:

  • 請求解析:如解析 JSON、URL 編碼的數(shù)據(jù)等。
  • 身份驗證:對所有路由進行身份驗證或權(quán)限校驗。
  • 請求日志:記錄所有請求的詳細信息。
  • 錯誤處理:全局捕獲應(yīng)用程序中的錯誤。

三、局部中間件的作用與用法

1. 什么是局部中間件?

局部中間件是指僅在特定路由或一組路由中生效的中間件。這種中間件只會在匹配到特定路由時執(zhí)行,適用于那些只針對部分路由進行的處理邏輯。

2. 局部中間件的定義與使用

局部中間件的定義通常是在路由處理函數(shù)之前,作為參數(shù)傳遞給路由。以下是一個簡單的示例:

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

// 局部中間件函數(shù)
const checkAuth = (req, res, next) => {
  const auth = req.headers.authorization;
  if (auth === 'secret-token') {
    next();  // 如果驗證通過,繼續(xù)處理下一個中間件或路由
  } else {
    res.status(403).send('Forbidden');  // 否則返回 403
  }
};

// 在特定路由中使用局部中間件
app.get('/protected', checkAuth, (req, res) => {
  res.send('This is a protected route');
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

在這個例子中,checkAuth 中間件只對 /protected 路由生效,用于驗證請求頭中的 authorization 是否匹配。

3. 多個局部中間件的使用

Express 支持在單個路由中使用多個局部中間件??梢酝ㄟ^鏈式調(diào)用來實現(xiàn)這一點:

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

const middleware1 = (req, res, next) => {
  console.log('Middleware 1');
  next();
};

const middleware2 = (req, res, next) => {
  console.log('Middleware 2');
  next();
};

app.get('/example', middleware1, middleware2, (req, res) => {
  res.send('Hello from /example route');
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

在 /example 路由中,middleware1 和 middleware2 都會按順序執(zhí)行,然后再由路由處理函數(shù)發(fā)送響應(yīng)。

4. 局部中間件的使用場景

局部中間件通常用于以下場景:

  • 特定路由的權(quán)限驗證:如用戶權(quán)限驗證或 API Key 驗證。
  • 特定請求的預(yù)處理:如為某些路由添加自定義的請求頭或參數(shù)。
  • 路由日志記錄:只記錄某些敏感路由的請求日志。

四、全局中間件與局部中間件的區(qū)別

全局中間件與局部中間件的主要區(qū)別在于它們的作用范圍:

特性全局中間件局部中間件
作用范圍對所有請求生效只對特定路由或請求生效
典型用途解析請求體、處理靜態(tài)文件、身份驗證等權(quán)限驗證、參數(shù)處理、日志記錄等
執(zhí)行順序按照在應(yīng)用程序中注冊的順序執(zhí)行按照在路由中定義的順序執(zhí)行
應(yīng)用場景通用功能,如請求解析、錯誤處理等特定場景,如單一路由的權(quán)限驗證等

五、總結(jié)

在 Express 應(yīng)用程序中,全局中間件與局部中間件各有用途。全局中間件用于處理那些適用于整個應(yīng)用程序的通用邏輯,如請求體解析、日志記錄等。而局部中間件則可以在特定路由中應(yīng)用,提供更精細化的控制,如路由權(quán)限驗證或請求預(yù)處理。

到此這篇關(guān)于Express中全局中間件與局部中間件的使用的文章就介紹到這了,更多相關(guān)Express 全局中間件與局部中間件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • nodejs部署到騰訊云服務(wù)器的實現(xiàn)(寶塔面板linux系統(tǒng))

    nodejs部署到騰訊云服務(wù)器的實現(xiàn)(寶塔面板linux系統(tǒng))

    本文主要介紹了nodejs部署到騰訊云服務(wù)器的實現(xiàn)(寶塔面板linux系統(tǒng)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • NodeJS使用Range請求實現(xiàn)下載功能的方法示例

    NodeJS使用Range請求實現(xiàn)下載功能的方法示例

    本篇使用 NodeJS 的 HTTP 服務(wù)創(chuàng)建客戶端,使用 Range 請求實現(xiàn)下載功能,本篇使用 NodeJS 的 HTTP 服務(wù)創(chuàng)建客戶端,使用 Range 請求實現(xiàn)下載功能
    2018-10-10
  • Node.js實現(xiàn)前端后端數(shù)據(jù)傳輸加密解密

    Node.js實現(xiàn)前端后端數(shù)據(jù)傳輸加密解密

    這篇文章主要介紹了Node.js實現(xiàn)前端后端數(shù)據(jù)傳輸加密解密,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Node.js 使用遞歸實現(xiàn)遍歷文件夾中所有文件

    Node.js 使用遞歸實現(xiàn)遍歷文件夾中所有文件

    這篇文章主要介紹了Node.js使用遞歸實現(xiàn)遍歷文件夾中所有文件,需要的朋友可以參考下
    2017-09-09
  • Node.js控制臺彩色輸出的方法與原理實例詳解

    Node.js控制臺彩色輸出的方法與原理實例詳解

    這篇文章主要給大家介紹了關(guān)于Node.js控制臺彩色輸出的方法與原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • nodejs部署到騰訊云的實現(xiàn)方法

    nodejs部署到騰訊云的實現(xiàn)方法

    本文主要介紹了nodejs部署到騰訊云的實現(xiàn)方法,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 從零學(xué)習(xí)node.js之利用express搭建簡易論壇(七)

    從零學(xué)習(xí)node.js之利用express搭建簡易論壇(七)

    這篇文章主要介紹了node.js利用express搭建簡易論壇的方法,我們需要搭建的這個簡易的論壇主要的功能有:注冊、登錄、發(fā)布主題、回復(fù)主題。下面我們來一步步地講解這個系統(tǒng)是如何實現(xiàn)的,需要的朋友可以參考借鑒。
    2017-02-02
  • node.js中的path.sep方法使用說明

    node.js中的path.sep方法使用說明

    這篇文章主要介紹了node.js中的path.sep方法使用說明,本文介紹了path.sep的方法說明、語法、使用實例,需要的朋友可以參考下
    2014-12-12
  • express框架,報錯:“Cannot set headers after they are sent to the client”,解決方法總結(jié)

    express框架,報錯:“Cannot set headers after t

    這篇文章主要介紹了express框架,報錯:“Cannot set headers after they are sent to the client”,解決方法,結(jié)合實例形式總結(jié)分析了常見的問題原因與對應(yīng)的解決方案,需要的朋友可以參考下
    2023-05-05
  • node.js?readline和line-reader逐行讀取文件方法

    node.js?readline和line-reader逐行讀取文件方法

    Readline是Node的原生模塊。它是專門為從任何可讀流逐行讀取內(nèi)容而開發(fā)的。它可用于從命令行讀取數(shù)據(jù),line-reader模塊是Node.js中逐行讀取文件的開源模塊。它不是本地模塊,所以你需要使用npm(節(jié)點包管理器)安裝它
    2022-10-10

最新評論

兴宁市| 遂昌县| 泾川县| 昌宁县| 马山县| 库车县| 永仁县| 福州市| 沁源县| 台山市| 盐池县| 渑池县| 大化| 沁水县| 堆龙德庆县| 临朐县| 屯门区| 张家港市| 台北县| 青铜峡市| 砚山县| 天柱县| 芒康县| 铜梁县| 渑池县| 交城县| 福泉市| 东阳市| 清苑县| 团风县| 万荣县| 全南县| 昌吉市| 阜阳市| 永宁县| 湖口县| 岚皋县| 和龙市| 泾阳县| 肇东市| 漳平市|