Context
用过Express的都知道,它只有两个对象:一个为Request
还有一个Response
。那么在Koa中,多了一个对象为Context
它将node中的request
和response
对象封装到单个对象中,为编写 Web 应用程序和 API 提供了许多有用的方法。
每个请求都将创建一个Context
,并在中间件中作为接收器引用,或者ctx
标识符:
app.use(async ctx => {
ctx; // 这是 Context
ctx.request; // 这是 koa Request
ctx.response; // 这是 koa Response
});
再看一段:
app.use(async (ctx, next) => {
await next();
ctx.body = 'Hello World'; //这代表了response.body
});
所以正如官网所说的:
为方便起见许多上下文的访问器和方法直接委托给它们的ctx.request
或ctx.response
,不然的话它们是相同的。 例如ctx.type
和ctx.length
委托给response
对象,ctx.path
和ctx.method
委托给request
。
看了第二段代码我们可能对上面那句话好理解些。