欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Koa2中間件的作用及路由實(shí)現(xiàn)實(shí)例詳解

 更新時(shí)間:2023年05月24日 10:42:17   作者:前端老兵  
這篇文章主要介紹了Koa2中間件的作用及路由實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

中間件 與 koa2中間件

通俗的講:中間件就是匹配路由之前或者匹配路由完成做的一系列的操作,我們就可以 把它叫做中間件。

中間件的作用就是,在上下兩個(gè)事件通訊的過(guò)程中強(qiáng)行塞入一個(gè)事件,這個(gè)事件可以起到承上啟下的作用,并在運(yùn)行應(yīng)用的時(shí)候做一些只關(guān)于部分模塊化功能。

中間件其實(shí)并不是koa2的發(fā)明,在express中就已經(jīng)存在了,只不過(guò)koa2站在了es7巨人的肩膀上,使用async await讓中間件形成了一個(gè)飽滿的洋蔥型。

Koa 中間件采用的是洋蔥圈模型,每次執(zhí)行下一個(gè)中間件傳入兩個(gè)參數(shù) ctx 和 next,參數(shù) ctx 是由 koa 傳入的封裝了 request 和 response 的變量,可以通過(guò)它訪問(wèn) request 和 response,next 就是進(jìn)入下一個(gè)要執(zhí)行的中間件 。

// 中間件,暴露一個(gè)函數(shù)
module.exports = function () {
  return async function (ctx, next) {
    pv(ctx);
    // 執(zhí)行下一個(gè)中間件,沒(méi)有下一個(gè)中間件就執(zhí)行完了
    await next();
  };
};

koa2的中間件可以有好幾層,在每一次請(qǐng)求與響應(yīng)的時(shí)候,都可以在中間攔截,

做登錄態(tài)管理、狀態(tài)碼管理、錯(cuò)誤處理...總之每個(gè)中間件都可以做一次攔截來(lái)搞事情。

Koa 中間件作用

中間件功能是可以訪問(wèn)請(qǐng)求對(duì)象(request),響應(yīng)對(duì)象(response)和應(yīng)用程序的請(qǐng)求-響應(yīng)周期中通過(guò) next 對(duì)下一個(gè)中間件函數(shù)的調(diào)用。

通俗來(lái)講,利用這個(gè)特性在 next 之前對(duì) request 進(jìn)行處理,在 next 函數(shù)之后對(duì) response 處理。Koa 的中間件模型可以非常方便的實(shí)現(xiàn)后置處理邏輯。

實(shí)例

const koa = require('koa')
const app = new koa()
app.use(async (ctx,next) => {
    console.log('1')
    await next()
    console.log('1-1')
    ctx.body = 'hello world'
})
app.use(async (ctx,next) => {
    console.log('2')
    await next()
    console.log('2-1')
})
app.use((ctx) => {
    console.log('3')
})
app.listen(3000)

輸出

1
2
3
2-1
1-1

自己編寫(xiě)一個(gè)Koa路由中間件

官網(wǎng)地址https://koa.bootcss.com/index.html#request

const koa = require('koa')
const app = new koa()
app.use(async (ctx) => {
    if (ctx.url === '/') {
        console.log('這是首頁(yè)');
        ctx.body = '這是首頁(yè)'
    } else if (ctx.url === '/user') {
        if (ctx.method === 'GET') {
            console.log('這是用戶列表頁(yè)');
            ctx.body = '這是用戶列表頁(yè)'
        } else if (ctx.method === 'POST') {
            console.log('添加用戶');
            ctx.body = '添加用戶'
        }
    } else {
        ctx.status = 404
    }
})
app.listen(3000)

使用koa-router實(shí)現(xiàn)路由

const koa = require('koa')
const Router = require('koa-router')
const app = new koa()
const router = Router({
    prefix: '/user'
})
router.get('/', async (ctx) => {
    ctx.body = '這是用戶首頁(yè)'
})
router.get('/del', async (ctx) => {
    ctx.body = '刪除用戶'
})
router.post('/add', async (ctx) => {
    ctx.body = '添加用戶'
})
app.use(router.routes())
app.listen(3000)

參考文檔 https://koa.bootcss.com/index.html

以上就是Koa2中間件的詳細(xì)內(nèi)容,更多關(guān)于Koa2中間件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 安裝多版本node的完整步驟記錄

    安裝多版本node的完整步驟記錄

    在平時(shí)的使用中常會(huì)遇到這樣的場(chǎng)景,手上有多個(gè)前端項(xiàng)目,每個(gè)項(xiàng)目使用的Nodejs的版本都不太一致,下面這篇文章主要給大家介紹了關(guān)于安裝多版本node的完整步驟,需要的朋友可以參考下
    2024-01-01
  • NodeJS模塊Buffer原理及使用方法解析

    NodeJS模塊Buffer原理及使用方法解析

    這篇文章主要介紹了NodeJS模塊Buffer原理及使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • nodejs如何讀取文件二進(jìn)制 前端響應(yīng)blob或base64顯示圖片

    nodejs如何讀取文件二進(jìn)制 前端響應(yīng)blob或base64顯示圖片

    這篇文章主要介紹了nodejs如何讀取文件二進(jìn)制 前端響應(yīng)blob或base64顯示圖片方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 5分鐘教你用nodeJS手寫(xiě)一個(gè)mock數(shù)據(jù)服務(wù)器的方法

    5分鐘教你用nodeJS手寫(xiě)一個(gè)mock數(shù)據(jù)服務(wù)器的方法

    這篇文章主要介紹了5分鐘教你用nodeJS手寫(xiě)一個(gè)mock數(shù)據(jù)服務(wù)器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • node實(shí)現(xiàn)socket鏈接與GPRS進(jìn)行通信的方法

    node實(shí)現(xiàn)socket鏈接與GPRS進(jìn)行通信的方法

    這篇文章主要介紹了node實(shí)現(xiàn)socket鏈接與GPRS進(jìn)行通信的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 學(xué)習(xí)Nodejs之fs模塊的使用詳解

    學(xué)習(xí)Nodejs之fs模塊的使用詳解

    這篇文章主要為大家詳細(xì)介紹了Nodejs之fs模塊的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Node.js包管理工具(npm、yarn、cnpm)

    Node.js包管理工具(npm、yarn、cnpm)

    本文主要介紹了Node.js包管理工具,包含npm、yarn、cnpm者三種,借助包管理工具,可以快速開(kāi)發(fā)項(xiàng)目,提升開(kāi)發(fā)效率,下面就來(lái)具體介紹一下如何使用,感興趣的可以了解一下
    2024-08-08
  • async/await優(yōu)雅的錯(cuò)誤處理方法總結(jié)

    async/await優(yōu)雅的錯(cuò)誤處理方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于async/await優(yōu)雅的錯(cuò)誤處理方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • node.js實(shí)現(xiàn)pdf與圖片互轉(zhuǎn)代碼示例

    node.js實(shí)現(xiàn)pdf與圖片互轉(zhuǎn)代碼示例

    因工作需求,記錄一次如何在Node中pdf與圖片互轉(zhuǎn)各種操作,這篇文章主要給大家介紹了關(guān)于node.js實(shí)現(xiàn)pdf與圖片互轉(zhuǎn)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Express之get,pos請(qǐng)求參數(shù)的獲取

    Express之get,pos請(qǐng)求參數(shù)的獲取

    本篇文章主要介紹了Express之get,pos請(qǐng)求參數(shù)的獲取的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05

最新評(píng)論