<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
學習目標:
原始碼地址:koajs/compose
Koa-compose 是一個 Koa 中介軟體工具,Koa 是一個流行的 Node.js 網路框架。Koa-compose 允許你將多箇中介軟體函陣列合成一個單獨的函數,這樣可以更容易地管理和重用中介軟體。
在 Koa 中,中介軟體函數是按照特定順序呼叫的函數,用於處理傳入的 HTTP 請求並生成響應。中介軟體函數可以執行各種任務,例如解析請求主體、驗證請求引數或與資料庫互動。
中介軟體的簡單範例:
// sendHandle.js const sendHandle = () => { // 處理請求成功方法 const render = ctx => { return (data, msg = '請求成功') => { ctx.set('Content-Type', 'application/json'); ctx.body = { code: '000001', data, msg } } } // 處理請求失敗方法 const renderError = ctx => { return (code, msg = '請求失敗') => { ctx.set('Content-Type', 'application/json'); ctx.body = { code, data: null, msg } } } return async (ctx, next) => { ctx.send = render(ctx); ctx.sendError = renderError(ctx); await next(); } } module.exports = sendHandle;
然後在app.js 中參照,如圖
上面中介軟體的作用是處理請求的結果。
詳細程式碼可以參考,codeniu/niu-box ,這是一個 koa 小專案。
洋蔥模型是一種用於解釋中介軟體的架構模型。它描述了中介軟體的工作方式,以及中介軟體如何在處理請求和生成響應時與其他中介軟體協同工作。
在洋蔥模型中,中介軟體被描述為一個可以包裝在外層的函數。每個中介軟體函數都可以在接收到請求時執行一些操作,然後將請求傳遞給內層的中介軟體函數。當內層的中介軟體函數完成工作並返回響應時,外層的中介軟體函數可以再次執行一些操作,然後將響應返回給使用者端。
'use strict' /** * Expose compositor. */ module.exports = compose /** * Compose `middleware` returning * a fully valid middleware comprised * of all those which are passed. * * @param {Array} middleware * @return {Function} * @api public */ function compose (middleware) { if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!') for (const fn of middleware) { if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!') } /** * @param {Object} context * @return {Promise} * @api public */ return function (context, next) { // last called middleware # let index = -1 return dispatch(0) function dispatch (i) { if (i <= index) return Promise.reject(new Error('next() called multiple times')) index = i let fn = middleware[i] if (i === middleware.length) fn = next if (!fn) return Promise.resolve() try { return Promise.resolve(fn(context, dispatch.bind(null, i + 1))) } catch (err) { return Promise.reject(err) } } } }
compose()
函數的引數是一箇中介軟體陣列,它包含了要組合的中介軟體函數。首先,程式碼會檢查中介軟體陣列是否是一個陣列,並檢查陣列中的每個元素是否都是函數。如果中介軟體陣列不合法,就會丟擲一個錯誤。
然後,compose()
函數會返回一個新的函數,該函數接受兩個引數:context
和 next
。context
物件包含了請求的上下文資訊,例如請求路徑、請求引數等。next
函數是一個回撥函數,用於在當前中介軟體函數完成工作後呼叫下一個中介軟體函數。
變數 index
,用於記錄最後一個被呼叫的中介軟體函數的編號。
在每次呼叫中介軟體函數之前,都會檢查當前中介軟體函數的編號是否小於等於 index
變數。如果是,就意味著 next()
函數被呼叫了多次,會返回一個錯誤。然後會更新 index
變數,並獲取下一個中介軟體函數。
如果當前中介軟體函數是最後一箇中介軟體函數,就會將 next
函數賦值給當前中介軟體函數。如果沒有更多的中介軟體函數,就會返回一個已完成的 Promise 物件。
最後,呼叫當前中介軟體函數,並返回一個 Promise 物件。如果在呼叫過程中發生錯誤則會丟擲一個異常。
koa-compose 使用遞迴和Promise來實現多箇中介軟體的鏈式呼叫,Promise 很好的簡化了非同步流程,並且能夠讓你使用 try-catch
語句捕獲非同步錯誤。
以上就是Node.js 網路框架koa compose中介軟體使用解析的詳細內容,更多關於Node.js框架koa compose中介軟體的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45