当前位置:网站首页>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
边栏推荐
- 《MySQL入门很轻松》第4章:数据表中存放的数据类型
- FreeRTOS任务基础
- 蔚来杯2022牛客暑期多校训练营7 CFGJ
- Golden Warehouse Database KingbaseGIS User Manual (6.6. Geometric Object Verification Function, 6.7. Spatial Reference System Function)
- 漫谈缺陷管理的自动化实践方案
- ES6 从入门到精通 # 13:数组的扩展方法二
- Kubernetes 60个为什么
- 上交所实时行情文件汇总
- E - Sugoroku 3(期望dp)
- deepstream学习笔记(三):deepstream-imagedata-multistream解析与接入适配yolov5模型测试
猜你喜欢

3.9 - 正规表达式和正规集 3.10 - 有限自动机

Leetcode82. 删除排序链表中的重复元素 II

openEuler 知:abi 检测

数字孪生电力系统,可视化应用实现科学调度的电子设备

WPF DataGrid 使用数据模板

dlopen failed: library "libtaml.so" not found

ECCV 2022 | 微软开源TinyViT :搞定小模型的预训练能力

mysql无法远程连接 Can‘t connect to MySQL server on ‘xxx.xxx.xxx.xxx‘ (10060 “Unknown error“)

AirFlow介绍

RebatMq消息中间件(一) 各个中间件介绍
随机推荐
ES6 从入门到精通 # 14:迭代器 Iterator 的用法
Eureka protects itself
新开窗口 展示协议
第十五章 mysql存储过程与存储函数课后练习
781. 森林中的兔子
为什么不建议你在 Docker 中跑 Mysql ?
hql语言
Wireshark经典实践和面试13点总结
LSTM-based distributed energy generation prediction (Matlab code implementation)
Dry goods!Towards robust test-time adaptation
3.1 - 程序设计语言 3.2 - 高级语言的特点及引用 3.3 - 静态/动态类型语言
【「收藏」Oracle 数据库安装】
算法---整数替换(Kotlin)
Tensor flow 踩坑记
Kubernetes 60个为什么
阿雷的血压有些低
Jpa 查询view or 无主键的table
Service Discovery @EnableDiscoveryClient
mysql无法远程连接 Can‘t connect to MySQL server on ‘xxx.xxx.xxx.xxx‘ (10060 “Unknown error“)
dlopen failed: library "libtaml.so" not found