1樓:自由的囚徒
比如寫乙個日誌中介軟體:
const
Koa=
require
('koa'
)const
koaStatic
=require
('koa-router'
)const
=new
Koa()
function
loggerAsync()}
// 日誌中介軟體
.use
(loggerAsync
())router
.get
("/text",(
ctx,
next
)=>)//路由中介軟體當日誌中介軟體執行完之後,會呼叫路由中介軟體,路由中介軟體內部會主動呼叫next()方法
.use
(router
.routes
()).
use((
ctx)
=>).
listen
(3000
)next()原理:
const=}
.use
(next
=>).
use(
next
=>).
use(
next
=>)function
dispatch
(index
)dispatch(0
)// 1 2 3
2樓:zz-jesse
提問者有兩個問題,乙個是中介軟體用來做什麼,也就是解決了什麼問題,如果不用這種模式是否有其他方法實現。
另乙個就是 next 的實現機制。大家都在說 next 如何實現,確沒說解決了什麼問題。
3樓:德川家康薛丁格
首先,如同其他答主提到的, node.js 本身沒有中介軟體這個概念,中介軟體這個概念是!部分 nodejs 框架中用到的。
按照我的理解是這樣的。例如.
get(
"/user/:id"
,fun1).
get(
fun2).
use(
fun3
)將這三個方法儲存到陣列
[,,]
每次有網路請求進入時,
遍歷這個陣列,尋找匹配的方法,找到以後儲存下標,並將 next 方法當作引數穿進去
例如/user/1
會匹配 fun1,
此時執行 fun1 並將 next 方法傳入,並儲存此時的陣列下標 0
當 fun1 方法中,執行到 next 方法時進入下乙個中介軟體
next 方法的大概作用是, 從儲存的下標的下一項開始(如此時下標為 0 則從 1 開始)便利上面的陣列,並匹配,如果能匹配上,則執行匹配上的方法,
4樓:dboy
就是位於請求和返回之間的處理函式,fn (req, res, next),因為中間函式不只乙個,所以需要next來把這些函式串起來。next 的另乙個好處是各個中間函式可以靈活控制何時呼叫下乙個。
Node (Express) 的Middleware模式
5樓:左易方
個人理解的話在Express裡中介軟體更像是篩子。
Express的機制是這樣的。總是嚴格按照順序執行所有的中介軟體。那怎麼確定上乙個中介軟體執行完畢了呢?呼叫next()即可。
舉例來說,有個介面僅限管理員使用。我們就可以加乙個中介軟體。篩掉普通使用者的請求。
如果這個請求當前合格。那我們就用next方法允許他通過。
擴充套件:next方法是可以帶引數的,帶任何引數都會被認為發生了錯誤。此時。請求會跳過之後的所有正常中介軟體。直到被錯誤處理中介軟體攔截為止。
實際用途就是出錯時傳錯誤碼和錯誤資訊。在錯誤處理中介軟體中發res.status().send()。這很RESTful。
6樓:呼吸
對於node中涉及到中介軟體地方我比較熟讀的有express和koa,express的中介軟體用的是connect,如果題主對於這塊是怎麼實現比較感興趣的話,可以參考Connect 原始碼解析;對於koa的話如果題主也比較感興趣的話,可以參考koa原始碼解析 。
7樓:胖總
某日。安發動機的工程師A操作完畢後,跟新來的安車門的工程師B說道:
「It's your turn.」
工程師B無動於衷。
「該你了!」
工程師B仍然無動於衷。
工程師A上去踹了他一腳:「白痴,幹啥呢!」工頭C跑過來,拉住A:「他只懂西班牙語。」工程師A:「原來如此。」
工頭C:「好在全廠工人培訓的時候,我們都教會了乙個單詞。」工程師A:「什麼單詞?」
工頭C:「next」。
工程師B聽到立馬把車門安在了車架上。
這個故事告訴我們:
1,中介軟體就是流水線;
2,流水線需要統一介面進行工序對接,而這個介面,就是next。
8樓:
猜測你應該說的是類似Express框架中的中介軟體概念。首先,Express中的中介軟體是用來處理乙個請求中的request和response物件的。所有的中介軟體可以看成是乙個stack,當有乙個請求進來的時候,從stack的頂端依次向下傳。
每個中介軟體都做它對應要做的事,例如讀這個請求的資訊,修改這個請求的response。然後它可以選擇 1)結束這個request-response cycle 2)繼續將這個請求向下傳遞。當這個中介軟體選擇將這個請求傳遞給下個中介軟體時,就會呼叫next方法。
舉一些常用的中介軟體例子:日誌處理,cookie-session處理,表單處理。
Using Express middleware, Express middleware
9樓:
就像流水線一樣。
第乙個人把雞蛋扔到傳送帶上。
next第二個人把雞蛋煮熟。
next第三個人把把雞蛋殼打碎。
next第四個人把蛋殼剝掉。
next第五個人吃雞蛋。
中介軟體是對多個步驟的封裝。
把2 3 4封裝成中介軟體。
就變成了第乙個人把雞蛋扔到傳送帶上。
next 加工中介軟體處理雞蛋。
next 吃雞蛋。
哪些特定的中介軟體技術服務商提供的中介軟體解決了哪些問題?
Xiaoyu Ma 中介軟體現在含義都擴充的太寬泛了,號稱什麼都是中介軟體。本質上來說中介軟體是為了把一些業務邏輯無關的繁瑣問題打包成解決方案的東西 比如你有個ATM系統,你要處理從ATM終端到銀行資料中心間的通訊。如果你沒中介軟體,你要人肉一套通訊庫,又由於是銀行系統,你要考慮丟包,加密,負載均衡...
如何評判基於中介軟體的分布式mysql與 雲資料庫?
小胖哥 我是旁觀者,搶答一把。分布式資料庫現在不止阿里的DRDS了,華為雲也出了個DDM Distributed Database Middleware 產品。1.產品有沒有推出,和公司技術儲備 戰略規劃 前期積累都相關,可能覺得有單機資料庫就夠了,就能賺很多錢了吧 2.分布式資料庫的重點是分庫分表...
Photoshop 中的智慧型物件是用來做什麼的?
IT小仙女 一 智慧型物件和普通的圖層不同,它保留影象的源內容及其所有原始特性。也就是說,無論你怎麼縮放選擇智慧型物件,它都不會丟失原始的資訊。二 智慧型物件可以替換內容。雙擊智慧型物件的縮圖,PS就會開啟乙個智慧型物件的原始檔,在這裡我們可以對他進行畫素級的修改或者直接替換內容,最後記得 合併可見...