koa2中间键原理
一、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;
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
二、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;
更多精彩

