koa2中间键原理
2024-10-07 02:08:34
一、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;
最新文章
- GCD 开发
- JavaScript的继承
- 求x^0+x^1+x^2+.......x^n mod p; x,n,p<;=10^9
- Android架构分析之Android消息处理机制(二)
- centos7 搭建 docker 环境
- [CSS3] Using CSS Combinators to Identify Siblings and Descendants in CSS
- Absolute sort
- shell 文件中列的整合成一个文件
- discuz开发学习
- webstorm配置编译sass的输出目录
- centos开放端口8080
- 《MySQL必知必会》读书笔记_3
- 通用权限管理系统之权限菜单zTree树的展示及移动的处理方法
- 前后端分离djangorestframework——视图组件
- input 手机号
- week06 07 创建RPC SERVER 换个镜像安装下载
- width:100%和width:auto区别
- 用Fiddler抓到的报文Content-Type: application/x-www-form-urlencoded,怎样解析?
- 用kubeadm 搭建 高可用集群问题记录和复盘整个过程 - 通过journalctl -u kubelet.service命令来查看kubelet服务的日志
- 小程序插入html代码