koa的中間件

什么是koa?

由 Express 原班人馬打造的 koa,致力于成為一個(gè)更小、更健壯、更富有表現(xiàn)力的 Web 框架。使用 koa 編寫 web 應(yīng)用,通過組合不同的 generator,可以免除重復(fù)繁瑣的回調(diào)函數(shù)嵌套,并極大地提升常用錯(cuò)誤處理效率。Koa 不在內(nèi)核方法中綁定任何中間件,它僅僅提供了一個(gè)輕量優(yōu)雅的函數(shù)庫,使得編寫 Web 應(yīng)用變得得心應(yīng)手。

什么是中間件?

中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源。中間件位于客戶機(jī)/ 服務(wù)器的操作系統(tǒng)之上,管理計(jì)算機(jī)資源和網(wǎng)絡(luò)通訊。是連接兩個(gè)獨(dú)立應(yīng)用程序或獨(dú)立系統(tǒng)的軟件。相連接的系統(tǒng),即使它們具有不同的接口,但通過中間件相互之間仍能交換信息。執(zhí)行中間件的一個(gè)關(guān)鍵途徑是信息傳遞。通過中間件,應(yīng)用程序可以工作于多平臺或OS環(huán)境。

如圖

koa的中間件模型?

如圖

koa的中間件采用的是洋蔥模型,每一次對于程序的訪問,都會(huì)從外向內(nèi)依次經(jīng)過每一個(gè)中間件,再依次由內(nèi)向外。

如何手寫一個(gè)中間件?

下面實(shí)現(xiàn)一個(gè)用戶記錄用戶訪問記錄,服務(wù)返回時(shí)間的中間件為例。

const koa = require('koa')
const app = new koa()
const port = 3000

// middleware1 - logger
app.use(async (ctx, next) => {
    console.log(1)
  await next()
  console.log(2)
  const rt = ctx.response.get('X-Response-Time')
  logger.info(`${ctx.method} ${ctx.url} - ${rt}`)
})

// middleware2 - x-response-time
app.use(async (ctx, next) => {
    console.log(3)
  const start = Date.now()
  await next()
  console.log(4)
  const ms = Date.now() - start
  ctx.set('X-Response-Time', `${ms}ms`)
})

app.use(ctx => {
    console.log(5)
    ctx.body = 'hello world!'
})

app.listen(port, () => {
    console.log(`server start success at port ${port}`)
})

await next 意思就是跳過當(dāng)前的程序執(zhí)行下一個(gè)中間件, 所以當(dāng)用戶訪問該程序時(shí)打出的日志就是1-3-5-4-2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,649評論 19 139
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,312評論 2 89
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,187評論 25 708
  • 又是一年即將過去,正如我們所預(yù)期的一樣,隨著大量涌入的創(chuàng)新、刺激、令人興奮的新工具和技術(shù),Web 平臺正呈現(xiàn)著爆炸...
    IT程序獅閱讀 8,540評論 14 165
  • 為什么越來越多的人會(huì)選擇關(guān)閉朋友圈? 朋友圈,已是現(xiàn)代人際社交的一種時(shí)尚,就像手機(jī),已是人們生活不可或缺的寶貝,人...
    熊玲心理咨詢閱讀 750評論 0 0

友情鏈接更多精彩內(nèi)容