目录
- Koa框架
- Response 、Request 委托
1. Koa框架 —— Koa 是包含一系列中间件generator的对象,这些中间件函数会以栈的结构组成并,使用async await语法 依次执行
- 本文的主要目的不是介绍Koa,而是想要通过Koa 的Response /Request Api来介绍委托模式,下面以实现Koa 的 Response方法的body属性来介绍:
- 先写一个koa 中间件:
import koa from 'koa'
const app = new koa()
app.use(async (ctx,next) => {
ctx.body = ctx.Response.body // Expected true
})
app.listen(3000,() =>{
console.log('正在监听3000端口:')
})
- koa 是由大名鼎鼎的TJ 所写的框架,为什么 ctx.body === ctx.Response.body 呢?原因就是即将介绍的js 设计模式中的委托模式。
js 的委托模式:对外暴露的对象将请求委托给内部的其他对象进行处理,即上面例子中的
ctx.Response.body === ctx.body,这里就是对Response 对象的一系列操作委托给ctx,Koa 代码实现原理如下:
import koa from 'koa'
const app = new koa()
// 核心代码
app.use(async (ctx,next) => {
Object.defineProperty(ctx,'body',{
get(){
return ctx.response.body
},
set(v){
return ctx.response.body = v
}
})
})
app.listen(3000,() =>{
console.log('正在监听3000端口:')
})
Request对象也是如此,Response对象的其他属性实现委托模式也类似
网友评论