nodejs洋葱模型

732 阅读1分钟

前言

koa最大的特点就是中间件流程控制,是典型的洋葱模型.

洋葱模型

下图可以清晰的看出,经过中间件从请求到响应的过程.先从外到内,然后从内到外.

koa是完全依赖异步编程的,最重要的维护context和next这两个变量.

当第一个中间件next执行的时候,会阻塞当前,等待第二个中间件的执行.当中间件中没有调用next时开始逆向执行

avatar

常用的中间件

  1. koa-router (路由)

  2. koa-views + ejs (后端渲染)

  3. koa-logger (日志)

  4. koa2-cors (跨域)

简易版代码


const middleware = [];

let mw1 = async function (ctx, next) {

console.log("next前,第一个中间件");

await next();

console.log("next后,第一个中间件");

};

let mw2 = async function (ctx, next) {

console.log("next前,第二个中间件");

await next();

console.log("next后,第二个中间件");

};

let mw3 = async function (ctx, next) {

console.log("第三个中间件,没有next了");

};

function use(mw) {

middleware.push(mw);

}

use(mw1);

use(mw2);

use(mw3);

let compose = function (ctx) {

return dispatch(0);

function dispatch(i) {

let currentMW = middleware[i];

if (!currentMW) {

return;

}

return currentMW(ctx, dispatch.bind(null, i + 1));

}

};

compose();