目錄
- 框架簡(jiǎn)介
- 相同點(diǎn)
- 兩者區(qū)別
框架簡(jiǎn)介
Express 框架:
- Express 框架是由大名鼎鼎的TJ所寫的Web 框架邑狸,它的底層的Node.js http 模塊步氏,Express 框架是http模塊的再次封裝陨簇,提供了豐富的http工具
- 底層的http模塊封裝Express 的原理如下:
const http = require('http')
// 創(chuàng)建一個(gè)app 實(shí)例
const app = http.createServer((request,response) => {
response。writeHead(200,{"Content-Type":"text/plain"})
respnse.end('hello world')
})
http.createServer(app).listen(3000)
- 什么是Express 的中間件:可以處理http請(qǐng)求的函數(shù),它的特點(diǎn)是一個(gè)中間件處理完就會(huì)傳遞給下一個(gè)中間件,上面創(chuàng)建的app實(shí)例在運(yùn)行過(guò)程中會(huì)處理?xiàng)j?duì)中的所有中間件
// 每一個(gè)中間件從app實(shí)例接受四個(gè)參數(shù)涯肩,分別為request,response.next,error(第四個(gè)參數(shù)為錯(cuò)誤處理函數(shù)的參數(shù)巢钓,不常見(jiàn))病苗,從而對(duì)此進(jìn)行操作
export const middleWare(request,response,next){
/**
* request 請(qǐng)求相關(guān)操作
* response 響應(yīng)相關(guān)操作
* next 控制是否傳遞到下一個(gè)中間的方法
**/
}
- use方法:創(chuàng)建的app實(shí)例中注冊(cè)中間件的方法
const express = require('express')
const app = express()
const middleWare1(request,response,next){
next()
}
const middleWare2(request,response,next){
response.set('name','qinglin')
next()
}
app.listen(3000)
上面代碼中寫了兩個(gè)中間件函數(shù)middleWare1、middleWare2症汹,第一個(gè)中間件執(zhí)行結(jié)束后硫朦,通過(guò)next()方法執(zhí)行第二個(gè)中間件函數(shù)。
- 想了解next點(diǎn)擊鏈接 next源碼解析
Koa框架:
- 是由 TJ 寫的框架背镇, 封裝請(qǐng)求原理與Express 類似咬展,但是Koa V2的傳遞中間件的方法是通過(guò)async await語(yǔ)法來(lái)實(shí)現(xiàn)的,因此中間件的執(zhí)行模式是洋蔥皮一樣嵌套的泽裳。
相同點(diǎn)——
- Express和Koa都是再次封裝請(qǐng)求的web 框架,Express 是基于http模塊破婆,而Koa是基于co運(yùn)行的涮总。
- Koa 的APi 更簡(jiǎn)單,只有application和ctx荠割,ctx.Request妹卿、ctx.Response中的api 與express 中的request、response的APi類似,application 中的api也一樣蔑鹦。
- Express 能實(shí)現(xiàn)的功能Koa 也能實(shí)現(xiàn)夺克。
兩者區(qū)別
- Express 的內(nèi)置api 更豐富些比如自帶 Router等,而Koa只有app 和ctx嚎朽,在Koa想要使用其他的中間件工具铺纽,需要自己安裝
- 兩者依次執(zhí)行中間件函數(shù)的模式不同,Express 是線性模式哟忍,而Koa 是洋蔥模式狡门,傳遞下一個(gè)中間件函數(shù)的方法不同,前者是使用回調(diào)锅很,通過(guò)next()方法執(zhí)行下一個(gè)中間件其馏,而Koa 是使用async await的方法,Express 使用回調(diào)爆安,Koa沒(méi)有回調(diào)
- Koa 對(duì)于Node.js的版本有要求叛复,7.6.0以上的版本才會(huì)支持async await語(yǔ)法,而Express 對(duì)于Node.js的版本沒(méi)有要求