Koa系列-Middleware:koa-connect
2019-06-12 字数统计:4.1k 字 阅读时长 ≈ 4 分钟

很简单的一个中间件,用来转化 connectExpress 的中间件在 koa 上的使用。

直接分析代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 处理 connect,直接返回 next()
function noCallbackHandler(ctx, connectMiddleware, next) {
connectMiddleware(ctx.req, ctx.res)
return next()
}

// 处理 Express,使用 Promise来处理 next
function withCallbackHandler(ctx, connectMiddleware, next) {
return new Promise((resolve, reject) => {
connectMiddleware(ctx.req, ctx.res, err => {
if (err) reject(err)
else resolve(next())
})
})
}

// 输出的中间件
function koaConnect(connectMiddleware) {
// 根据传入的函数的参数判断是哪个框架
const handler = connectMiddleware.length < 3
? noCallbackHandler
: withCallbackHandler
return function koaConnect(ctx, next) {
return handler(ctx, connectMiddleware, next)
}
}

module.exports = koaConnect