express是基于node.js的一個(gè)框架楣黍,保留了一些nodejs原生的api并且新增了一些api
app=express()
app稱應(yīng)用,app.user()調(diào)用的是npm的express插件,也可以給非指定method的自定義中間件使用,
app.get/post只能處理get請(qǐng)求桥帆,并且只能用自定義中間件芦昔,不能用npm中間件
app.get與router.get都是一個(gè)樣账嚎,只是router是為了不讓代碼擠在一個(gè)js文件而弄出的克滴。所以api一模一樣
任何應(yīng)用級(jí)方法,路由級(jí)方法熄驼,比如user,get都支持n多個(gè)中間件連寫(xiě)像寒。
猜測(cè):所以指定同一路由的user函數(shù)等,都會(huì)執(zhí)行瓜贾,只到遇到res流
至于require的npm插件诺祸,調(diào)用app.user(),就可以把這個(gè)中間件參數(shù)擴(kuò)展到req對(duì)象里祭芦,任何后面的中間件req里都可以獲取值
只是納悶筷笨,為什么是req?
req在node.js中,寫(xiě)的權(quán)限應(yīng)該是瀏覽器龟劲,讀的權(quán)限應(yīng)該是服務(wù)器(猜測(cè)),為什么express可以給服務(wù)器與寫(xiě)req對(duì)象的權(quán)限胃夏?(有了一個(gè)猜想)
猜想:express的npm包,不應(yīng)該理解成擴(kuò)展咸灿,恰恰相反侮叮,應(yīng)該是還原避矢,還原h(huán)ttp協(xié)議里本來(lái)就有的,不過(guò)被node.js環(huán)境req對(duì)象舍棄了。因?yàn)橐婚_(kāi)啟user审胸,加載multer亥宿,就可以讀到二進(jìn)制文件,而瀏覽器沒(méi)有改動(dòng)砂沛,顯然烫扼,是本來(lái)就該有的功能被打開(kāi)了,而且相應(yīng)的res流也打開(kāi)了相應(yīng)的屬性碍庵,至于要不要傳到瀏覽器映企,由express,還是用戶決定静浴?
顯然堰氓,只要閱讀http協(xié)議相關(guān)書(shū)籍或者瀏覽器相關(guān)底層封裝,就能知道我這個(gè)猜想對(duì)不對(duì)苹享。
不管對(duì)不對(duì)双絮。目前來(lái)說(shuō),還算嚴(yán)謹(jǐn)