日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Express中间件工作原理介绍

發布時間:2024/9/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Express中间件工作原理介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Express中間件工作原理介紹

  • 中間件是Express框架學習中最難的部分,同時也是最為核心的技術,我們的學習路線如下
    • 1.什么是中間件
    • 2.Express中間件的本質及工作原理
    • 3.自定義解析post請求參數的中間件
    • 4.第三方中間件使用

1.1-什么是中間件

  • 下圖是一個自來水凈化的過程,這張圖可以更好的理解什么是中間件
  • 水庫的水并不是直接取出來就送到用戶的家中使用,而是經過一些凈化過濾處理之后才送到用戶的家中,在這個過程中水還是水,本質上還是同一個東西,但是卻多了一些東西
    • 水庫中原始的水可以理解為是瀏覽器的原始請求request
    • 最終用戶喝到的水可以理解為是express最終獲取的請求request
    • 而過濾中的一些加絮凝劑、過濾池等操作就是中間件,可以理解為給我們原始的請求request添加了一些屬性或者方法(如post參數解析之后的對象等)

1.2-中間件的本質及工作原理

  • 1.中間件其實就是一個函數

    • function(req,res,next){ req:請求對象 res:響應對象 next:下一個中間件 }
  • 2.Express如何使用中間件?:三種方式

    ? app.use('pathname',中間件) : ? pathname不寫: 任何請求路徑都會執行這個中間件 ? pathname寫了:任何以pathname開頭的請求路徑都會執行這個中間件 ? app.get('pathname',中間件) : 請求路徑為pathname的get請求會執行這個中間件 ? app.post('pathname',中間件) : 請求路徑為pathname的post請求會執行這個中間件

  • 3.中間件工作流程(Express處理網絡請求流程)

? a.從上往下依次匹配請求路徑,如果匹配成功則執行該中間件 ? b.如果這個中間件中調用了:next() ,則會繼續往下匹配 ? c.如果所有的中間件都無法匹配,則會自動進入一個兜底的中間件響應返回404 not found錯誤

//導入模塊 const express = require('express'); //創建服務器 let app = express();/*1.什么是express中間件?: 其實就是一個函數(這個函數有三個參數)function(req,res,next){ req:請求對象 res:響應對象 next:下一個中間件 } *//*2.express如何使用中間件?: 三種方式 app.use('pathname',中間件) :pathname不寫: 任何請求路徑都會執行這個中間件pathname寫了:任何以pathname開頭的請求路徑都會執行這個中間件app.get('pathname',中間件) : 請求路徑為pathname的get請求會執行這個中間件app.post('pathname',中間件) : 請求路徑為pathname的post請求會執行這個中間件 *//* 3.express處理網絡請求的流程a.從上往下依次匹配請求路徑,如果匹配成功則執行該中間件b.如果這個中間件中調用了:next() ,則會繼續往下匹配c.如果所有的中間件都無法匹配,則會自動進入一個兜底的中間件響應返回404 not found錯誤 */app.use('/abc',(req,res,next)=>{//污水凈化第一步:添加絮凝劑console.log(11111);req.a = '添加了絮凝劑';next(); });app.use('/abc',(req,res,next)=>{//污水凈化第二步:添加活性炭console.log(22222);req.b = '添加活性炭';next(); });app.post('/abc',(req,res,next)=>{console.log(33333);next(); });app.get('/abc',(req,res,next)=>{console.log(44444);//看下污水凈化到這一步加了什么console.log(req.a);console.log(req.b);res.send('hello'); });//express底層有一個默認的兜底中間件,如果上面所有的中間件都無法匹配或者沒有結束響應,則會進入這個中間件 //自定義一個兜底中間件,覆蓋默認的 app.use((req,res)=>{console.log(55555);res.send('你的路徑是不是寫錯啦'); });//開啟服務器 app.listen(3000, () => {console.log('success'); });

1.3-自定義解析post請求參數中間件

  • 使用postman測試

  • bodyParse

const querystring = require('querystring');/* 導出中間件(函數)第一個參數:請求對象第二個參數:完成回調* postObject:post請求參數對象 */ module.exports = (req, res, next) => {/*如果本次請求是post請求,則解析post請求參數,并且將解析好的參數對象作為req的屬性傳遞給下一個中間件*/if (req.method == 'POST') {//1.1 給req注冊一個data事件let postData = "";req.on('data', function (chuck) {postData += chuck;});//1.2給req注冊一個end事件req.on('end', function () {//1.3 使用 querystring模塊解析post參數let postObjc = querystring.parse(postData);//將解析好的參數對象添加到req的屬性中req.body = postObjc;//執行下一個中間件next();});}}
  • index.js
//導入模塊 const express = require('express'); //創建服務器 let app = express();//使用中間件 //任何請求都會進入我們自己寫的中間件,并且只要是post請求就會幫你解析好參數放入req.body中 app.use(require('./bodyParse.js'));app.post('/abc',(req,res,next)=>{console.log(req.body);//告訴客戶端我收到的參數res.send(req.body); });app.post('/efg',(req,res,next)=>{console.log(req.body);//告訴客戶端我收到的參數res.send(req.body); });//開啟服務器 app.listen(3000, () => {console.log('success'); });

總結

以上是生活随笔為你收集整理的Express中间件工作原理介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。