【随笔】express中间件系统的基本实现
生活随笔
收集整理的這篇文章主要介紹了
【随笔】express中间件系统的基本实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一直覺得express的中間件系統這種流式處理非常形象,就好像加工流水線一樣,每個環節都在針對同一個產品的不同部分完成自己的工作,最后得到一個成品。今天就來實現一個簡易的【中間件隊列】。
一. API層
-
初始化方法
let middleware = new MiddleWare(); -
添加中間件函數的方法
//Fn為被添加的中間件 middleware.use(Fn); -
啟動中間件隊列
middleware.start(req, res);
二. 核心類的定義
class MiddleWare{constructor(){this.queue = [];//用來存放中間件隊列}//添加中間件use(fn){this.queue.push(fn);//將自定義中間件加入隊列}//按次序執行中間件start(req, res){let i = 0;//執行指針//執行器const next = (err)=>{//如果有錯誤就將錯誤信息掛在response上并直接退出if(err){res.hasError = true;res.data = err.toString();return;}//如果沒有錯誤就查看是否到達隊尾,若沒到則繼續執行下一個中間件if(i < this.queue.length){this.queue[i++](req, res, next);/*將next直接傳入當前執行的函數作為回調當前執行函數執行到任何一步,通過主動調用next方法即可將相關信息傳給下一個中間件。*/}else{//如果已經到隊尾了則結束console.log('finish');}}//啟動第一個next();} }三. 使用use方法添加中間件
//添加第一個中間件 /* 此處演示了一個基本的錯誤捕捉的寫法,當中間件中出現錯誤時,會捕捉到錯誤并傳入next */ middleware.use(function(req, res, next){try{req.addon1 = 'I add something'; }catch(err){next(err);}next(); });//添加第二個中間件 middleware.use(function(req, res, next){res.addon2 = 'I add something more';next(); });//添加第三個中間件 middleware.use(function(req, res, next){if (req.addon2) {delete req.addon2;}res.addon3 = 'I add something a lot';next(); });四. 消費定義的類
“消費”這個詞是最近學到的,覺得很裝X,所以也在這里裝一下~
let req = {}; let res = {}; let result = middleware.start(req,res); console.log(req, res);五. 查看運行結果
可以看到有錯誤發生和正常響應時的不同結果:
六. 在服務器端運行
用node起一個web服務器那真是太隨意了~
const http = require('http'); //上面的一堆代碼 http.createServer(function(req, res){let result = {};middleware.start(req, result);res.end(JSON.stringify(result)); }).listen(9527);看一下效果(訪問服務器時自定義消息就可以傳至前臺了):
轉載于:https://blog.51cto.com/13869008/2177444
總結
以上是生活随笔為你收集整理的【随笔】express中间件系统的基本实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我要做 Android 之面笔试总结
- 下一篇: 067_VFPage中Js与contro