koa2
ミドルウェアはasync/await
、実装プロセスが次のプロセスによって駆動されるという認識に基づいていることはすでにわかっているkoa2
ため、特別な実行順序があり、この順序の実装を求めるモデル、つまりオニオンモデルを設定します。
今、あなたが手につまようじを持っていて、タマネギを水平に通過する場合、それは層ごとに浸透するだろうか?最初のレイヤーから2番目のレイヤー、3番目のレイヤー、そして中間のレイヤーに移動し、3番目のレイヤー、2番目のレイヤー、1番目のレイヤーからレイヤーごとに浸透します。実際、koa2ミドルウェアの実行順序もこのようになっています。ビジネスコードは別として、koa2公式ウェブサイトの例を使用して実験してください
const Koa = require('koa');
const app = new Koa();
// logger
app.use(async (ctx, next) => {
console.log('第一层洋葱 - 开始')
await next();
const rt = ctx.response.get('X-Response-Time');
console.log(`${
ctx.method} ${
ctx.url} - ${
rt}`);
console.log('第一层洋葱 - 结束')
});
// x-response-time
app.use(async (ctx, next) => {
console.log('第二层洋葱 - 开始')
const start = Date.now();
await next();
const ms = Date.now() - start;
ctx.set('X-Response-Time', `${
ms}ms`);
console.log('第二层洋葱 - 结束')
});
// response
app.use(async ctx => {
console.log('第三层洋葱 - 开始')
ctx.body = 'Hello World';
console.log('第三层洋葱 - 结束')
});
app.listen(8000);
上記のコードを実行してみましょう。印刷結果は次のようになります。
第一层洋葱 - 开始
第二层洋葱 - 开始
第三层洋葱 - 开始
第三层洋葱 - 结束
第二层洋葱 - 结束
第一层洋葱 - 结束