日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

koa2 mysql 中间件_Koa2 和 Express 中间件对比

發布時間:2024/9/27 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 koa2 mysql 中间件_Koa2 和 Express 中间件对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

koa2 中間件

koa2的中間件是通過 async await 實現的,中間件執行順序是“洋蔥圈”模型。

中間件之間通過next函數聯系,當一個中間件調用 next() 后,會將控制權交給下一個中間件, 直到下一個中間件不再執行 next() 后, 將會沿路折返,將控制權依次交換給前一個中間件。

如圖:

koa2 中間件實例

app.js:

const Koa = require('koa');

const app = new Koa();

// logger

app.use(async (ctx, next) => {

console.log('第一層 - 開始')

await next();

const rt = ctx.response.get('X-Response-Time');

console.log(`${ctx.method} ----------- ${ctx.url} ----------- ${rt}`);

console.log('第一層 - 結束')

});

// x-response-time

app.use(async (ctx, next) => {

console.log('第二層 - 開始')

const start = Date.now();

await next();

const ms = Date.now() - start;

ctx.set('X-Response-Time', `${ms}ms`);

console.log('第二層 - 結束')

});

// response

app.use(async ctx => {

console.log('第三層 - 開始')

ctx.body = 'Hello World';

console.log('第三層 - 結束')

});

app.listen(3000);

第一層 - 開始

第二層 - 開始

第三層 - 開始

第三層 - 結束

第二層 - 結束

打印第一次執行的結果: GET -------- /text ------ 4ms

第一層 - 結束

koa2 中間件應用

下面是一個登陸驗證的中間件:

loginCheck.js:

module.exports = async (ctx, next) => {

if (ctx.session.username) {

// 登陸成功,需執行 await next(),以繼續執行下一步

await next()

return

}

// 登陸失敗,禁止繼續執行,所以不需要執行 next()

ctx.body = {

code: -1,

msg: '登陸失敗'

}

}

在刪除操作中使用 loginCheck.js :

router.post('/delete', loginCheck, async (ctx, next) => {

const author = ctx.session.username

const id = ctx.query.id

// handleDelete() 是一個處理刪除的方法,返回一個 promise

const result = await handleDelete(id, author)

if (result) {

ctx.body = {

code: 0,

msg: '刪除成功'

}

} else {

ctx.body = {

code: -1,

msg: '刪除失敗'

}

}

})

express 中間件

與 koa2 中間件不同的是,express中間件一個接一個的順序執行, 通常會將 response 響應寫在最后一個中間件中

主要特點:

app.use 用來注冊中間件

遇到 http 請求,根據 path 和 method 判斷觸發哪些中間件

實現 next 機制,即上一個中間件會通過 next 觸發下一個中間件

express 中間件實例

const express = require('express')

const app = express()

app.use((req, res, next) => {

console.log('第一層 - 開始')

setTimeout(() => {

next()

}, 0)

console.log('第一層 - 結束')

})

app.use((req, res, next) => {

console.log('第二層 - 開始')

setTimeout(() => {

next()

}, 0)

console.log('第二層 - 結束')

})

app.use('/api', (req, res, next) => {

console.log('第三層 - 開始')

res.json({

code: 0

})

console.log('第三層 - 結束')

})

app.listen(3000, () => {

console.log('server is running on port 3000')

})

執行app.js后,瀏覽器訪問 http://localhost:3000/api , 控制臺輸出結果:

第一層 - 開始

第一層 - 結束

第二層 - 開始

第二層 - 結束

第三層 - 開始

第三層 - 結束

因為上面各個中間件中的 next() 是異步執行的,所以 打印結果是線行輸出的。

如果取消上面next()的異步執行,直接按如下方式:

const express = require('express')

const app = express()

app.use((req, res, next) => {

console.log('第一層 - 開始')

next()

console.log('第一層 - 結束')

})

app.use((req, res, next) => {

console.log('第二層 - 開始')

next()

console.log('第二層 - 結束')

})

app.use('/api', (req, res, next) => {

console.log('第三層 - 開始')

res.json({

code: 0

})

console.log('第三層 - 結束')

})

app.listen(3000, () => {

console.log('server is running on port 3000')

})

執行app.js后,瀏覽器訪問 http://localhost:3000/api , 控制臺輸出結果:

第一層 - 開始

第二層 - 開始

第三層 - 開始

第三層 - 結束

第二層 - 結束

第一層 - 結束

可見,express 的中間件也可以形成“洋蔥圈”模型,但是一般在express中不會這么做,因為 express 的 response 一般在最后一個中間件,所以其它中間件 next() 后的代碼影響不到最終結果。

express 中間件應用

下面是一個登陸驗證的中間件:

loginCheck.js:

module.exports = (req, res, next) => {

if (req.session.username) {

// 登陸成功,需執行 next(),以繼續執行下一步

next()

return

}

// 登陸失敗,禁止繼續執行,所以不需要執行 next()

ctx.body = {

code: -1,

msg: '登陸失敗'

}

}

在刪除操作中使用 loginCheck.js :

router.post('/delete', loginCheck, (req, res, next) => {

const author = req.session.username

const id = req.query.id

// handleDelete() 是一個處理刪除的方法,返回一個 promise

const result = handleDelete(id, author)

return result.then(val => {

if (val) {

ctx.body = {

code: 0,

msg: '刪除成功'

}

} else {

ctx.body = {

code: -1,

msg: '刪除失敗'

}

}

})

})

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的koa2 mysql 中间件_Koa2 和 Express 中间件对比的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。