当前位置:网站首页>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
边栏推荐
猜你喜欢

足不出户也能看星空

Digital wallets, red sea ecological rapid introduction of small programs can help capture device entry wisdom

源码编译安装LAMP和LNMP

ES6 从入门到精通 # 12:数组的扩展方法一

博弈小游戏

Alibaba Cloud SMS Service Activation

Redis 非关系型数据库学习(一) ---- Redis 的安装

781. 森林中的兔子

ES6 Beginner to Mastery #15: Generator Usage

WPF DataGrid using data templates
随机推荐
JVM内存和垃圾回收-10.直接内存
781. 森林中的兔子
Kubernetes 开发环境比对
Dry goods!Towards robust test-time adaptation
Today's sleep quality record 61 points
【渗透工具】浏览器数据导出工具
Impala 疑问
arm-4-裸板开发
Seq2Seq论文阅读笔记
AirFlow介绍
下载markdown软件Obsidian(解决官网下载速度慢)
Distributed database problem (3): data consistency
阿里云短信服务开通
大龄测试员刚迈过了 35 岁这个“坎儿”,和大家说点儿心里话
什么是服务治理
mysql无法远程连接 Can‘t connect to MySQL server on ‘xxx.xxx.xxx.xxx‘ (10060 “Unknown error“)
【「收藏」Oracle 数据库安装】
Redis 大 key 要如何处理?
【数据存储】signed,unsigned到底怎么区分?如何计算?
使用C语言实现静态链表