当前位置:网站首页>Koa中间件next实现
Koa中间件next实现
2022-08-09 23:38:00 【学不会Hello World】
Koa中间件next实现
学习Koa模仿一下中间件原理,与Express比较类似
const http = require("http")
// 处理中间件,实现next机制
function middlewareHandler(middlewareList) {
return function (ctx) {
function dispatchNext(i) {
const fn = middlewareList[i]
try {
return Promise.resolve(fn(ctx, dispatchNext.bind(null, i + 1)))
} catch (error) {
return Promise.reject(error)
}
}
dispatchNext(0)
}
}
class Koa {
constructor() {
this.middlewareList = []
}
use(middleware) {
this.middlewareList.push(middleware)
return this
}
createContext(req, res) {
return {
res,
req,
}
}
executeMiddleware(ctx, fn) {
return fn(ctx)
}
callback() {
const fn = middlewareHandler(this.middlewareList)
return (req, res) => {
const ctx = this.createContext(req, res)
return this.executeMiddleware(ctx, fn)
}
}
listen(...args) {
const server = http.createServer(this.callback())
server.listen(...args)
}
}
module.exports = Koa
边栏推荐
猜你喜欢
Wireshark classic practice and interview 13-point summary
ES6 从入门到精通 # 12:数组的扩展方法一
工程 (七) ——PolarSeg点云语义分割
【「收藏」Oracle 数据库安装】
GoLang 使用 goroutine 停止的几种办法
781. 森林中的兔子
Digital wallets, red sea ecological rapid introduction of small programs can help capture device entry wisdom
安全知识培训——消防安全
framework源码读后感
【数据存储】signed,unsigned到底怎么区分?如何计算?
随机推荐
断开和服务器共享连接的方法「建议收藏」
Golden Warehouse Database KingbaseGIS User Manual (6.4. Geometry Object Access Function)
3.1 - 程序设计语言 3.2 - 高级语言的特点及引用 3.3 - 静态/动态类型语言
为什么不建议你在 Docker 中跑 Mysql ?
游泳馆系统次卡的设置有哪些细节?
MATLB|And her ups and downs and finally reached the peak of life [Romantic Journey]
conda新建环境时报错NotWritableError: The current user does not have write permissions
基于 LSTM 的分布式能源发电预测(Matlab代码实现)
基于ABP的AppUser对象扩展
知行合一的时候
Redisson 分布式锁
什么是服务治理
framework源码读后感
RebatMq消息中间件(一) 各个中间件介绍
Project (7) - PolarSeg point cloud semantic segmentation
3.11-程序基本的控制语句 3.12-表达式 3.13-数据类型 3.14-常量/变量 3.15-标识符
deepstream学习笔记(三):deepstream-imagedata-multistream解析与接入适配yolov5模型测试
hql语言
JVM内存和垃圾回收-10.直接内存
vmware Exsi 网卡配置