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);
}); console.log('listenning on 3000');
});
上面的**執行後會輸出123456,就像乙個洋蔥一樣,從外層進去,然後碰到next()
就執行下乙個中介軟體,執行完成後再返回回來。先假設我們已經實現了next
為下個中介軟體這段**,上面的執行邏輯就很清楚了,先輸出1
,然後進入下乙個中介軟體,去處理2
,同理最後後面都處理完成後處理5
,5
處理完成後第二個中介軟體結束,然後第乙個中介軟體再處理6
。
所以現在就是怎麼實現這個**。通過看koa
的原始碼我們可以發現它是通過koa-compose
這個庫實現的,**很短,如下:
function compose (middleware) catch (err)
}}}
核心**就是return promise.resolve(fn(context, dispatch.bind(null, i + 1)));
這裡了,每次執行中介軟體時,會將第二個中介軟體作為函式的第二個引數傳進去。這也就和上面的async (ctx, next) => {}
寫法對應上了,所以執行next()
就可以執行下乙個中介軟體了。 koa2中介軟體機制 洋蔥圈模型
一 什麼是koa的中介軟體 通俗的講 中介軟體就是匹配路由之前或者匹配路由完成做的一系列的操作,我們就可以把它叫做中介軟體。在express中介軟體 middleware 是乙個函式,它可以訪問請求物件 request object req 響應物件 response object res 和 we...
koa中介軟體梳理(洋蔥模型)
中介軟體概念 koa是乙個精簡的node框架,它主要做了以下事情 基於node原生req和res為request和response物件賦能,並基於它們封裝成乙個context物件。基於async await generator 的中介軟體洋蔥模型機制。koa1和koa2在原始碼上的區別主要是於對非同...
2 Koa中介軟體與洋蔥模型
1.async await 為了更好的理解aysnc await,我們先請求兩個介面 1.請求github中的使用者介面 請求github使用者介面 fetch then res res.json then json console.log json 2.請求github中的使用者介面後,請求特定使...