搜尋
首頁web前端js教程什麼是Express中間件? Node要怎麼使用?

什麼是Express中間件? Node要怎麼使用?以下這篇文章就來跟大家介紹一下Express中間件的簡單使用方法,希望對大家有幫助!

什麼是Express中間件? Node要怎麼使用?

一、什麼是Express中間件

中間件特別指業務流程的中間處理環節。

二、Express中間件的呼叫流程

當一個請求到達Express 的伺服器之後,可以連續呼叫多個中間件,從而對這次請求進行預處理。

三、中間件格式

本質上就是function處理函數

注意:中間件函數的形參列表中,必須包含next參數。而路由處理函數中只包含req和res,

// next参数必须在最后一个传入
const mw = (req, res, next) => {
    ...
    // next()必须在最后调用
    next()
}

四、next()函數的作用

next函數是實現多個中間件連續呼叫的關鍵,它表示把流轉關係轉交給下一個中間件或路由。

五、全域生效的中間件

客戶端發起的任何請求,到達伺服器之後,都會觸發的中間件,叫做全域生效的中間件。 透過呼叫server.use(中間件函數),即可定義一個全域生效的中間件,範例程式碼如下:

const mw = (req, res, next) => {
    next()
}

const mw1 = (req, res, next) => {
    next()
}

// 全局生效的中间件,中间件调用顺序以传入顺序为准
server.use(mw,mw1)

六、局部生效的中間件

#局部中間件只在某一個指定的路由路徑生效

const mw = (req, res, next) => {
    next()
}
const mw1 = (req, res, next) => {
    next()
}
// 局部生效的中间件
server.get('/',mw,(req,res)=>{
    res.send('路径:/')
})



// 定义多个局部生效的中间件
// 1、直接逗号分隔
server.get('/',mw,mw1,(req,res)=>{
    res.send('路径:/')
})
// 2、或者使用数组包含
server.get('/',[mw,mw1],(req,res)=>{
    res.send('路径:/')
})

七、中間件的作用

多個中間件之間,共享同一份req和res。基於這樣的特性,我們可以在上游的中間件中,統一為req或 res物件添加自訂的屬性或方法,供下游的中間件或路由進行使用。

const mw = (req, res, next) => {
    // 添加属性
    req.startTime=new Date()
    next()
}

八、Express中間件的五個注意點

  • #一定要在路由之前註冊中間件

  • 客戶端傳送過來的請求,可以連續呼叫多個中間件進行處理

  • #執行完中間件的業務程式碼之後,不要忘記呼叫next()函數

  • 為了防止程式碼邏輯混亂,當呼叫next()函數後不要再寫額外的程式碼

  • 連續呼叫多個中間件時,多個中間件之間,共享req和res物件

九、Express中間件的分類

  • 應用級別的中間件

  • 路由層級的中間件

  • #錯誤層級的中間件

  • ##Express內建的中間件

  • 第三方的中間件

#詳細介紹:

    ##應用程式級別的中間件
  • 透過app.use()或app.get()或app.post(),綁定到app實例上的中間件,叫做應用層級的中間件,程式碼範例如下:

    // 全局生效的中间件(应用级别的中间件)
    server.use(mw,mw1)
    // 局部生效的中间件(应用级别的中间件)
    server.get('/',mw,mw1,(req,res)=>{
        res.send(`请求进入服务器的时间:${req.startTime}`)
    })

  • 路由層級的中間件
  • 綁定到express.Router()實例上的中間件,叫做路由層級的中間件。它的用法和應用級別中間件沒有任何區別。只不過,應用層級中間件是綁定到app實例上,路由層級中間件綁定到router實例上,程式碼範例如下:

    const router = require('./router/router')
    // 路由级别的中间件
    router.use((req,res,next)=>{
        next()
    })

  • 錯誤層級的中間件
  • 錯誤等級中間件的作用:專門用來捕捉整個專案中發生的異常錯誤,從而防止專案異常崩潰的問題。

    格式∶錯誤等級中間件的 function處理函數中,必須有4個形參,形參順序從前到後,分別是(err, req, res, next)。

    注意:錯誤等級的中間件,必須註冊在所有路由之後!

    // 人为制造错误
    server.get('/err', (req, res) => {
        throw new Error('人为抛出错误!!!')
        res.send('err Page')
    })
    // 定义错误级别的中间件
    server.use((err, req, res, next) => {
        console.log('发生了错误:' + err.message);
        res.send('Error:'+err.message)
        next()
    })

  • Express內建的中間件
  • 自Express 4.16.0版本開始,Express 內建了3個常用的中間件,極大的提高了Express專案的開發效率和體驗:

      express.static快速託管靜態資源的內建中間件,例如:HTML檔、圖片、CSS樣式等(無相容性)
    • #express.json解析JSON格式的請求體資料(有相容性,僅在4.16.0 版本中可用)
    • express.urlencoded解析URL-encoded格式的請求體資料(有相容性,僅在4.16.0 版本中可用)
    • // 配置解析application/json格式数据的内置中间件
      server.use(express.json())
      // 配置解析application/x-www-form-urlencoded格式数据的内置中间件
      server.use(express.urlencoded({
          extended: false
      }))
      // 测试解析json的内置中间件
      server.post('/user',(req,res)=>{
          // 在服务器,可以使用req.body这个属性来接受客户端发送过来的请求数据
          // 默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefined
          console.log(req.body);
          res.send('ok')
      })
      
      // 测试解析urlencoded的内置中间件
      server.post('/book',(req,res)=>{
          console.log(req.body)
          res.send('book ok')
      })
  • 第三方的中間件
  • 非Express官方內建的,而是由第三方開發出來的中間件,叫做第三方中間件。在專案中,大家可以按需下載並配置第三方中間件,從而提高專案的開發效率。 例如:在

    express@4.16.0

    之前的版本中,常使用body-parser這個第三方中間件,來解析請求體資料。使用步驟如下:

      執行
    • npm install body-parser

      #安裝中間件

    • 使用require匯入中間件
    • 呼叫
    • server.use()

      註冊並使用中間件

    注意:Express 內建的express.urlencoded 中介軟體,就是基於body-parser這個第三方中介軟體進一步封裝出來的。

更多node相關知識,請造訪:nodejs 教學

以上是什麼是Express中間件? Node要怎麼使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
node、nvm与npm有什么区别node、nvm与npm有什么区别Jul 04, 2022 pm 04:24 PM

node、nvm与npm的区别:1、nodejs是项目开发时所需要的代码库,nvm是nodejs版本管理工具,npm是nodejs包管理工具;2、nodejs能够使得javascript能够脱离浏览器运行,nvm能够管理nodejs和npm的版本,npm能够管理nodejs的第三方插件。

Vercel是什么?怎么部署Node服务?Vercel是什么?怎么部署Node服务?May 07, 2022 pm 09:34 PM

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

node爬取数据实例:聊聊怎么抓取小说章节node爬取数据实例:聊聊怎么抓取小说章节May 02, 2022 am 10:00 AM

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

node导出模块有哪两种方式node导出模块有哪两种方式Apr 22, 2022 pm 02:57 PM

node导出模块的两种方式:1、利用exports,该方法可以通过添加属性的方式导出,并且可以导出多个成员;2、利用“module.exports”,该方法可以直接通过为“module.exports”赋值的方式导出模块,只能导出单个成员。

安装node时会自动安装npm吗安装node时会自动安装npm吗Apr 27, 2022 pm 03:51 PM

安装node时会自动安装npm;npm是nodejs平台默认的包管理工具,新版本的nodejs已经集成了npm,所以npm会随同nodejs一起安装,安装完成后可以利用“npm -v”命令查看是否安装成功。

聊聊V8的内存管理与垃圾回收算法聊聊V8的内存管理与垃圾回收算法Apr 27, 2022 pm 08:44 PM

本篇文章带大家了解一下V8引擎的内存管理与垃圾回收算法,希望对大家有所帮助!

node中是否包含dom和bomnode中是否包含dom和bomJul 06, 2022 am 10:19 AM

node中没有包含dom和bom;bom是指浏览器对象模型,bom是指文档对象模型,而node中采用ecmascript进行编码,并且没有浏览器也没有文档,是JavaScript运行在后端的环境平台,因此node中没有包含dom和bom。

聊聊Node.js path模块中的常用工具函数聊聊Node.js path模块中的常用工具函数Jun 08, 2022 pm 05:37 PM

本篇文章带大家聊聊Node.js中的path模块,介绍一下path的常见使用场景、执行机制,以及常用工具函数,希望对大家有所帮助!

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。