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

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

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

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

一、Express 中的中間件概述

1. 什么是中間件?

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

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

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

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

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

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

1. 什么是全局中間件?

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

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

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

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

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

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

// 全局解析 JSON 請(qǐng)求體
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 請(qǐng)求日志:

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)文件請(qǐng)求:

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

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

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

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

3. 全局中間件的使用場(chǎng)景

全局中間件通常用于以下場(chǎng)景:

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

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

1. 什么是局部中間件?

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

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

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

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

// 局部中間件函數(shù)
const checkAuth = (req, res, next) => {
  const auth = req.headers.authorization;
  if (auth === 'secret-token') {
    next();  // 如果驗(yàn)證通過,繼續(xù)處理下一個(gè)中間件或路由
  } 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');
});

在這個(gè)例子中,checkAuth 中間件只對(duì) /protected 路由生效,用于驗(yàn)證請(qǐng)求頭中的 authorization 是否匹配。

3. 多個(gè)局部中間件的使用

Express 支持在單個(gè)路由中使用多個(gè)局部中間件??梢酝ㄟ^鏈?zhǔn)秸{(diào)用來實(shí)現(xiàn)這一點(diǎ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 都會(huì)按順序執(zhí)行,然后再由路由處理函數(shù)發(fā)送響應(yīng)。

4. 局部中間件的使用場(chǎng)景

局部中間件通常用于以下場(chǎng)景:

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

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

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

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

五、總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    Node.js控制臺(tái)彩色輸出的方法與原理實(shí)例詳解

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

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

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

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

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

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

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

    express框架,報(bào)錯(cuò):“Cannot set headers after t

    這篇文章主要介紹了express框架,報(bào)錯(cuò):“Cannot set headers after they are sent to the client”,解決方法,結(jié)合實(shí)例形式總結(jié)分析了常見的問題原因與對(duì)應(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é)點(diǎn)包管理器)安裝它
    2022-10-10

最新評(píng)論

静乐县| 察雅县| 五台县| 米泉市| 永城市| 长阳| 宁武县| 扬中市| 昭觉县| 克什克腾旗| 奉新县| 长兴县| 合肥市| 壶关县| 大余县| 阿鲁科尔沁旗| 临泽县| 长宁县| 当阳市| 诸城市| 阿图什市| 阿鲁科尔沁旗| 泰州市| 那曲县| 绥棱县| 汕尾市| 绿春县| 长垣县| 元谋县| 宁晋县| 武汉市| 南宁市| 高台县| 棋牌| 迭部县| 武乡县| 华安县| 高安市| 益阳市| 珠海市| 筠连县|