1. 程式人生 > >node——模擬express中介軟體use

node——模擬express中介軟體use

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);
})