国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

iKcamp團(tuán)隊(duì)制作|基于Koa2搭建Node.js實(shí)戰(zhàn)(含視頻)? 中間件用法

Alfred / 409人閱讀

中間件用法——講解 Koa2 中間件的用法及如何開發(fā)中間件 ?? iKcamp 制作團(tuán)隊(duì)

原創(chuàng)作者:大哼、阿干、三三、小虎、胖子、小哈、DDU、可木、晃晃
文案校對(duì):李益、大力萌、Au、DDU、小溪里、小哈
風(fēng)采主播:可木、阿干、Au、DDU、小哈
視頻剪輯:小溪里
主站運(yùn)營:給力xi、xty
教程主編:張利濤

視頻地址:https://www.cctalk.com/v/15114357763623

文章 middleware 中間件
正是因?yàn)橹虚g件的擴(kuò)展性才使得 Koa 的代碼簡單靈活。

app.js 中,有這樣一段代碼:

app.use(async (ctx, next)=>{
  await next()
  ctx.response.type = "text/html"
  ctx.response.body = "

Hello World

" })

它的作用是:每收到一個(gè) http 請(qǐng)求,Koa 都會(huì)調(diào)用通過 app.use() 注冊(cè)的 async 函數(shù),同時(shí)為該函數(shù)傳入 ctxnext 兩個(gè)參數(shù)。而這個(gè) async 函數(shù)就是我們所說的中間件。

下面我們簡單介紹一下傳入中間件的兩個(gè)參數(shù)。

ctx

ctx 作為上下文使用,包含了基本的 ctx.requestctx.response。另外,還對(duì) Koa 內(nèi)部對(duì)一些常用的屬性或者方法做了代理操作,使得我們可以直接通過 ctx 獲取。比如,ctx.request.url 可以寫成 ctx.url

除此之外,Koa 還約定了一個(gè)中間件的存儲(chǔ)空間 ctx.state。通過 state 可以存儲(chǔ)一些數(shù)據(jù),比如用戶數(shù)據(jù),版本信息等。如果你使用 webpack 打包的話,可以使用中間件,將加載資源的方法作為 ctx.state 的屬性傳入到 view 層,方便獲取資源路徑。

next

next 參數(shù)的作用是將處理的控制權(quán)轉(zhuǎn)交給下一個(gè)中間件,而 next() 后面的代碼,將會(huì)在下一個(gè)中間件及后面的中間件(如果有的話)執(zhí)行結(jié)束后再執(zhí)行。

注意: 中間件的順序很重要!

我們重寫 app.js 來解釋下中間件的流轉(zhuǎn)過程:

// 按照官方示例
const Koa = require("koa")
const app = new Koa()

// 記錄執(zhí)行的時(shí)間
app.use(async (ctx, next) => {
  let stime = new Date().getTime()
  await next()
  let etime = new Date().getTime()
  ctx.response.type = "text/html"
  ctx.response.body = "

Hello World

" console.log(`請(qǐng)求地址: ${ctx.path},響應(yīng)時(shí)間:${etime - stime}ms`) }); app.use(async (ctx, next) => { console.log("中間件1 doSoming") await next(); console.log("中間件1 end") }) app.use(async (ctx, next) => { console.log("中間件2 doSoming") await next(); console.log("中間件2 end") }) app.use(async (ctx, next) => { console.log("中間件3 doSoming") await next(); console.log("中間件3 end") }) app.listen(3000, () => { console.log("server is running at http://localhost:3000") })

運(yùn)行起來后,控制臺(tái)顯示:

server is running at http://localhost:3000

然后打開瀏覽器,訪問 http://localhost:3000,控制臺(tái)顯示內(nèi)容更新為:

server is running at http://localhost:3000
中間件1 doSoming
中間件2 doSoming
中間件3 doSoming
中間件3 end
中間件2 end
中間件1 end
請(qǐng)求地址: /,響應(yīng)時(shí)間:2ms

從結(jié)果上可以看到,流程是一層層的打開,然后一層層的閉合,像是剝洋蔥一樣 —— 洋蔥模型。

此外,如果一個(gè)中間件沒有調(diào)用 await next(),會(huì)怎樣呢?答案是『后面的中間件將不會(huì)執(zhí)行』。

修改 app.js 如下,我們?nèi)サ袅说谌齻€(gè)中間件里面的 await

const Koa = require("koa")
const app = new Koa()

// 記錄執(zhí)行的時(shí)間
app.use(async (ctx, next)=>{
  let stime = new Date().getTime()
  await next()
  let etime = new Date().getTime()
  ctx.response.type = "text/html"
  ctx.response.body = "

Hello World

" console.log(`請(qǐng)求地址: ${ctx.path},響應(yīng)時(shí)間:${etime - stime}ms`) }); app.use(async (ctx, next) => { console.log("中間件1 doSoming") await next(); console.log("中間件1 end") }) app.use(async (ctx, next) => { console.log("中間件2 doSoming") // 注意,這里我們刪掉了 next // await next() console.log("中間件2 end") }) app.use(async (ctx, next) => { console.log("中間件3 doSoming") await next(); console.log("中間件3 end") }) app.listen(3000, () => { console.log("server is running at http://localhost:3000") })

重新運(yùn)行代碼后,控制臺(tái)顯示如下:

server is running at http://localhost:3000
中間件1 doSoming
中間件2 doSoming
中間件2 end
中間件1 end
請(qǐng)求地址: /,響應(yīng)時(shí)間:1ms

與我們的預(yù)期結(jié)果『后面的中間件將不會(huì)執(zhí)行』是一致的。

下一篇:我們將學(xué)習(xí)下如何響應(yīng)瀏覽器的各種請(qǐng)求。

上一篇:iKcamp新課程推出啦~~~~~iKcamp團(tuán)隊(duì)制作|基于Koa2搭建Node.js實(shí)戰(zhàn)(含視頻)? 環(huán)境準(zhǔn)備
推薦: 翻譯項(xiàng)目Master的自述: 干貨|人人都是翻譯項(xiàng)目的Master

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/92309.html

相關(guān)文章

  • iKcamp團(tuán)隊(duì)制作基于Koa2搭建Node.js實(shí)戰(zhàn)項(xiàng)目教學(xué)(視頻)? 環(huán)境準(zhǔn)備

    安裝搭建項(xiàng)目的開發(fā)環(huán)境 視頻地址:https://www.cctalk.com/v/15114357764004 showImg(https://segmentfault.com/img/remote/1460000012470016?w=1214&h=718); 文章 Koa 起手 - 環(huán)境準(zhǔn)備 由于 koa2 已經(jīng)開始使用 async/await 等新語法,所以請(qǐng)保證 node 環(huán)境在 7.6...

    bang590 評(píng)論0 收藏0
  • 開始連載啦~每周2更共11堂iKcamp課|基于Koa2搭建Node.js實(shí)戰(zhàn)項(xiàng)目教學(xué)(視頻)|

    摘要:玩轉(zhuǎn)同時(shí)全面掌握潮流技術(shù)采用新一代的開發(fā)框架更小更富有表現(xiàn)力更健壯。融合多種常見的需求場(chǎng)景網(wǎng)絡(luò)請(qǐng)求解析模板引擎靜態(tài)資源日志記錄錯(cuò)誤請(qǐng)求處理。結(jié)合語句中轉(zhuǎn)中間件控制權(quán),解決回調(diào)地獄問題。注意分支中的目錄為當(dāng)節(jié)課程后的完整代碼。 ?? ?與眾不同的學(xué)習(xí)方式,為你打開新的編程視角 獨(dú)特的『同步學(xué)習(xí)』方式 文案講解+視頻演示,文字可激發(fā)深層的思考、視頻可還原實(shí)戰(zhàn)操作過程。 云集一線大廠...

    B0B0 評(píng)論0 收藏0
  • 【完結(jié)匯總】iKcamp出品基于Koa2搭建Node.js實(shí)戰(zhàn)共十一堂課(視頻)

    摘要:云集一線大廠有真正實(shí)力的程序員團(tuán)隊(duì)云集一線大廠經(jīng)驗(yàn)豐厚的碼農(nóng),開源奉獻(xiàn)各教程。融合多種常見的需求場(chǎng)景網(wǎng)絡(luò)請(qǐng)求解析模板引擎靜態(tài)資源日志記錄錯(cuò)誤請(qǐng)求處理。結(jié)合語句中轉(zhuǎn)中間件控制權(quán),解決回調(diào)地獄問題。注意分支中的目錄為當(dāng)節(jié)課程后的完整代碼。 ?? ?與眾不同的學(xué)習(xí)方式,為你打開新的編程視角 獨(dú)特的『同步學(xué)習(xí)』方式 文案講解+視頻演示,文字可激發(fā)深層的思考、視頻可還原實(shí)戰(zhàn)操作過程。 云...

    sPeng 評(píng)論0 收藏0
  • iKcamp團(tuán)隊(duì)制作基于Koa2搭建Node.js實(shí)戰(zhàn)視頻)? 路由koa-router

    路由koa-router——MVC 中重要的環(huán)節(jié):Url 處理器 ?? iKcamp 制作團(tuán)隊(duì) 原創(chuàng)作者:大哼、阿干、三三、小虎、胖子、小哈、DDU、可木、晃晃 文案校對(duì):李益、大力萌、Au、DDU、小溪里、小哈 風(fēng)采主播:可木、阿干、Au、DDU、小哈 視頻剪輯:小溪里 主站運(yùn)營:給力xi、xty 教程主編:張利濤 視頻地址:https://www.cctalk.com/v/151...

    netmou 評(píng)論0 收藏0
  • iKcamp基于Koa2搭建Node.js實(shí)戰(zhàn)視頻)? HTTP請(qǐng)求

    POST/GET請(qǐng)求——常見請(qǐng)求方式處理 ?? iKcamp 制作團(tuán)隊(duì) 原創(chuàng)作者:大哼、阿干、三三、小虎、胖子、小哈、DDU、可木、晃晃 文案校對(duì):李益、大力萌、Au、DDU、小溪里、小哈 風(fēng)采主播:可木、阿干、Au、DDU、小哈 視頻剪輯:小溪里 主站運(yùn)營:給力xi、xty 教程主編:張利濤 視頻地址:https://www.cctalk.com/v/15114357765870 ...

    張利勇 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<