站長資訊網
        最全最豐富的資訊網站

        什么是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這個第三方中間件進一步封裝出來的。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久99精品久久久久久水蜜桃| 精品视频第一页| 日韩精品久久久久久免费| 久久夜色精品国产亚洲| 国产精品久久99| 亚欧洲精品在线视频免费观看| 国产精品国产精品国产专区不卡| 人人妻人人澡人人爽精品欧美 | 热re99久久精品国产99热| 无码国产亚洲日韩国精品视频一区二区三区 | 2022年国产精品久久久久| 亚洲精品尤物yw在线影院| 欧洲成人午夜精品无码区久久| 久久久精品人妻无码专区不卡| 国产成人精品日本亚洲网址| 久久99精品国产麻豆| 午夜不卡久久精品无码免费| 热久久国产欧美一区二区精品| 国产精品亚洲w码日韩中文| Xx性欧美肥妇精品久久久久久| 国产亚洲一区二区精品| 国自产偷精品不卡在线| 久久久免费精品re6| 亚洲精品国产精品乱码不99| 亚洲AV无码久久精品成人| 亚洲欧美国产精品第1页| 亚洲成网777777国产精品| 久久久久国产日韩精品网站| 久久国产精品波多野结衣AV| 国产精品原创巨作?v网站| 国产精品激情综合久久 | 精品国产一区二区22| 精品人妻伦九区久久AAA片69| 99精品电影一区二区免费看| 国产69精品久久久久99尤物| 99精品欧美一区二区三区| 国产成人精品久久亚洲| 99爱在线视频这里只有精品| 国产精品你懂的在线播放| 九色精品视频在线观看| 天天爽夜夜爽8888视频精品|