成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Alfred / 410人閱讀

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

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

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

文章 middleware 中間件
正是因為中間件的擴展性才使得 Koa 的代碼簡單靈活。

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

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

Hello World

" })

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

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

ctx

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

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

next

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

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

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

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

// 記錄執(zhí)行的時間
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(`請求地址: ${ctx.path},響應(yīng)時間:${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") })

運行起來后,控制臺顯示:

server is running at http://localhost:3000

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

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

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

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

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

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

// 記錄執(zhí)行的時間
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(`請求地址: ${ctx.path},響應(yīng)時間:${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") })

重新運行代碼后,控制臺顯示如下:

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

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92309.html

相關(guān)文章

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

    安裝搭建項目的開發(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 等新語法,所以請保證 node 環(huán)境在 7.6...

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

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

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

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

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

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

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

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

    張利勇 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<