之前在使用express的時候從來沒有想過為什麼可以這樣寫,中介軟體可以這樣用。今天決定把中介軟體原理給寫一遍。不多cc,直接上**。
在like-express檔案中
/*簡單的實現中介軟體原理
思路:定義乙個類,類裡面有和express對應的use get post函式,
全部存入到物件的對應屬性(這些屬性應該都為物件陣列,每個物件為path和stackk屬性組成)中
在http服務中會對使用者輸入的介面進行攔截,這時我們對其進行處理,對客戶端發過來不同的method和不同的url返回對應要執行的stack(stack存的是函式陣列),
最後寫乙個next核心機制去執行這些函式。
const slice = array.prototype.slice //陣列原型上的slice(start,end),從已有的陣列中返回選定的元素。
class likeexpress
}//將path和stack放入到info中,stack存的是函式,返回info
register(path)
//將path和stack放入到info中,stack存的是函式
if(typeof path === 'string')else
return info
}//例項中的use函式,來將使用者輸入實參存入到對應的routes中all陣列,存入的是乙個物件,又path,stack屬性
use()
get()
post()
//匹配使用者使用的use,get,post方法,返回使用者輸入的對應路由的後端輸入函式
match(method,url)
//獲取後端輸入的routes,根據method進行篩選
let curroutes =
curroutes = curroutes.concat(this.routes.all) //concat陣列拼接函式
curroutes = curroutes.concat(this.routes[method])
//遍歷篩選後的物件陣列,攔截使用者輸入的路由,返回後端輸入的函式
curroutes.foreach(routeinfo =>
})return stack
}//核心的next機制,去執行match後的函式
handle(req,res,stack)
}next()
}//http服務入口檔案
callback()
const url = req.url
const method = req.method.tolowercase()
const resultlist = this.match(method,url) //返回攔截使用者輸入的路由,返回的後端輸入的函式
this.handle(req,res,resultlist) //next核心機制,去執行這些函式}}
listen(...args)
}//工廠函式
module.exports = ()=>
const express = require('./like-express')
//本次http請求的例項
console.log('請求開始...',req.method,req.url)
next()
})function loginchech(req,res,next))
} console.log(req.method,'處理路由')
res.json()
next()
}) console.log(req.method,'處理路由')
next()
}) console.log('server is running on port 3000')
})
express中介軟體
中介軟體的本質就是乙個請求處理方法 函式 該方法接收三個引數 request請求物件 response響應物件 next下乙個中介軟體 把使用者從請求到響應的整個過程分發到多個中介軟體去處理。同乙個請求所經過的中介軟體的請求物件和響應物件都是同乙個請求物件和相應物件 不關心請求路徑和請求方法的中介軟...
Express中介軟體
express是乙個路由和中介軟體web框架,其自身的功能很少 express應用程式本質上是一系列中介軟體函式呼叫。中介軟體功能是可以訪問請求物件 req 響應物件 res 和應用程式的請求 響應週期中的下乙個中介軟體功能的功能。下乙個中介軟體功能通常由名為的變數表示next。中介軟體功能可以執行...
express中介軟體
中介軟體的知識點 同乙個請求物件所經過的中介軟體都是同乙個請求物件和響應物件 如果沒有可以匹配的中介軟體,將會輸出 cannot get 路徑 console.log 111 res.end hello next console.log 222 res.end world next 控制台會輸出11...