koa洋蔥模型

2021-09-25 03:30:24 字數 1696 閱讀 9816

**:乙個洋蔥來一刀

有圖有真相:等到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中的使用者介面後,請求特定使...