**:乙個洋蔥來一刀
有圖有真相:等到next()函式執行完成之後,才會next()後面的**,那麼洋蔥心就是最後乙個執行完畢的中介軟體,每個next就是洋蔥每一層的分界線
const koa = require('koa');
console.log(1);
await next();
console.log(1.1);
}); console.log(2);
await next();
console.log(2.2);
}); console.log(3);
await next();
console.log(3.3);
});
列印結果// 1
// 2
// 3
// 3.3
// 2.2
開始剝洋蔥~ 1.接收函式,存入陣列
// 存放中介軟體的陣列
middlewares: ,
// 儲存方法,模擬使用中介軟體
use(fn) };
compose: 開始串聯每個函式,使用下標遞增,並遞迴至最後乙個函式結束
return function () );
}
} }
3.考慮支援非同步,使用async/await
return async function () );
}}}4.測試一下
console.log(1);
next();
console.log(1.1)
}) console.log(2);
next();
console.log(2.2);
}) console.log(3);
next();
console.log(3.3);
});// 執行順序
// 1
// 2
// 3
// 3.3
// 2.2
// 1.1
5.為什麼要是洋蔥模型
如果第乙個中介軟體想得到後續中介軟體執行後的結果,那我們應該怎麼辦?
const koa = require('koa');
console.log(1);
await next();
// 取出lastval
console.log(1.1, ctx.lastval);
}); console.log(2);
await next();
console.log(2.2);
}); console.log(3);
await next();
console.log(3.3);
// 設定lastval
ctx.lastval = 3.3;
});// 1
// 2
// 3
// 3.3
// 2.2
// 1.1 3.3
通過掛載在ctx,我們可以取到最後中介軟體的結果: 這應該就是洋蔥模型的真諦了吧~
koa中介軟體梳理(洋蔥模型)
中介軟體概念 koa是乙個精簡的node框架,它主要做了以下事情 基於node原生req和res為request和response物件賦能,並基於它們封裝成乙個context物件。基於async await generator 的中介軟體洋蔥模型機制。koa1和koa2在原始碼上的區別主要是於對非同...
Koa中介軟體機制的洋蔥圈模型
const koa require koa console.log 1 await next console.log 6 console.log 2 await next console.log 5 console.log 3 ctx.body hello world console.log 4 c...
2 Koa中介軟體與洋蔥模型
1.async await 為了更好的理解aysnc await,我們先請求兩個介面 1.請求github中的使用者介面 請求github使用者介面 fetch then res res.json then json console.log json 2.請求github中的使用者介面後,請求特定使...