koa2

image.png
如上圖,每一個請求都會一層層穿過中間件,最終在某個中間件處結(jié)束(不再繼續(xù)調(diào)用下邊的中間件),然后一層層返回。
如果需要寫一個服務(wù),我們需要自己寫具體的中間件去處理邏輯,而在前邊可以使用中間件,幫助實(shí)現(xiàn)
const SESSION_Config = {
key:'koa:sessssss',
maxAge:86400000,
overwrite: true, /** (boolean) can overwrite or not (default true) */
httpOnly: true, /** (boolean) httpOnly or not (default true) */
signed: true, /** (boolean) signed or not (default true) */
}
app.keys = ['mykoa'];
app.use(cors({credentials:true}));
app.use(session(SESSION_Config, app));
app.use(async(ctx,next)=>{ //session 處理
if(!ctx.session.islogin){
ctx.session.islogin=false;
}
await next();
});
app.use(json());
app.use(logger());
app.use(bodyparser);
//如上代碼,我使用cors,session,json,logger,bodyparser
//這些中間件幫我現(xiàn)實(shí)了跨域,session,json化,日志,請求體解析。
app.use(index.routes(),index.allowedMethods()); //公共api
app.use(async(ctx,next)=>{ //登陸檢驗(yàn)
if(ctx.session.islogin){
await next();
}else{
ctx.body={state:-4,tip:"請登錄"}
}
})
app.use(user.routes(),user.allowedMethods());
//以上我只需要實(shí)現(xiàn)路由中間具體邏輯處理即可
如果學(xué)過spring的,可能想到那么controller和service呢?對不起,沒有。
使用koa的話,controller及以后的需要自己實(shí)現(xiàn)?;蛘哒冶容^好的中間件。
Egg.js 為企業(yè)級框架和應(yīng)用而生
首先egg是在koa上的封裝。
那koa沒有controller,service,router,所以egg加入了這些,并且約定了文件目錄結(jié)構(gòu),等等,這樣的話,更利于工程化的開發(fā)。