node——模擬express中介軟體use
阿新 • • 發佈:2019-01-01
let linkArr=[]; //定義一個數組用來存放需要進行中轉呼叫的函式 let req={url:"/"}; //初始化req物件,模擬http協議傳送過來的資料 let res={end:()=>{}}; //初始化res物件,模擬伺服器傳送給客戶端的資料 const app={ use:function(fn){ if(typeof fn !=="function") return; //判斷呼叫的引數是否為陣列,如果不是則直接退出 linkArr.push(fn); //把函式放入陣列中,以便進行中傳呼叫 this.run(req,res); //呼叫run()來初始化next() }, run:function(req,res){ function next(){ let nextFn=linkArr.shift();//獲取陣列中的第一個函式,並把它從陣列中移除(因為已經使用過了) if(nextFn){ nextFn(req,res,next); //初始化陣列中的第一次呼叫 } } next(); //初始化函式 } } app.use((req,res,next)=>{ console.log(11); req.name="小紅"; next(); }); app.use((req,res,next)=>{ console.log(req.name); })