一、koa2

const http = require('http');
const compose = require('./compose');


class Koa {
  constructor() {
    this.ctx = {};
    this.middleWares = [];
  }

  use(fn) {
    this.middleWares.push(fn);
  }

  handler(ctx, fnMiddleware) {
    fnMiddleware(ctx);
  }

  callback() {
    const fn = compose(this.middleWares);
    const handleRequest = () => {
      this.handler(this.ctx, fn);
    };
    return handleRequest;
  }

  listen(...args) {
    const server = http.createServer(this.callback());
    server.listen(...args);
  }
}

module.exports = Koa;

 

二、compose 中间键组合

function compose(middleWare) {
  return function fnMiddleWare(ctx) {
    function dispatch(i) {
      const fn = middleWare[i];
      if (!fn) return Promise.resolve();
      try {
        return Promise.resolve(fn(ctx, dispatch.bind(null, i + 1)));
      } catch (error) {
        return Promise.reject(error);
      }
    }
    return dispatch(0);
  };
}

module.exports = compose;

 

相关文章:

  • 2021-08-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-15
  • 2022-12-23
  • 2021-09-25
  • 2021-08-19
  • 2021-12-24
  • 2021-08-07
  • 2021-10-26
相关资源
相似解决方案