乐闻世界logo
搜索文章和话题

Koa Context 对象 ctx 的核心属性和使用方法详解

2月21日 15:53

Koa 的 Context 对象(ctx)是将 Node.js 的 request 和 response 对象封装到一个对象中的核心概念,通过代理模式提供了更简洁的 API。

ctx 对象的核心属性和方法:

请求相关属性:

  • ctx.request:Koa 的 Request 对象
  • ctx.req:Node.js 原生的 request 对象
  • ctx.request.url:请求 URL
  • ctx.request.method:请求方法
  • ctx.request.header:请求头对象
  • ctx.request.query:解析后的查询字符串
  • ctx.request.querystring:原始查询字符串
  • ctx.request.path:请求路径
  • ctx.request.body:请求体(需要 body-parser 中间件)

响应相关属性:

  • ctx.response:Koa 的 Response 对象
  • ctx.res:Node.js 原生的 response 对象
  • ctx.response.body:响应体
  • ctx.response.status:响应状态码
  • ctx.response.header:响应头对象
  • ctx.response.type:响应 Content-Type
  • ctx.response.length:响应 Content-Length

便捷访问(直接通过 ctx):

  • ctx.url:等同于 ctx.request.url
  • ctx.method:等同于 ctx.request.method
  • ctx.header:等同于 ctx.request.header
  • ctx.query:等同于 ctx.request.query
  • ctx.body:等同于 ctx.response.body
  • ctx.status:等同于 ctx.response.status
  • ctx.type:等同于 ctx.response.type

其他重要属性:

  • ctx.state:推荐的命名空间,用于传递中间件之间的信息
  • ctx.app:应用实例引用
  • ctx.cookies:Cookie 操作工具
  • ctx.throw():抛出 HTTP 错误
  • ctx.assert():断言检查

代码示例:

javascript
app.use(async (ctx) => { // 获取请求信息 const url = ctx.url; const method = ctx.method; const query = ctx.query; // 设置响应 ctx.status = 200; ctx.type = 'application/json'; ctx.body = { message: 'Hello Koa' }; // 使用 state 传递数据 ctx.state.user = { id: 1, name: 'John' }; // 抛出错误 if (!ctx.query.token) { ctx.throw(401, 'Token required'); } });

ctx 对象的设计优势:

  1. 简洁性:减少了代码冗余,提高开发效率
  2. 一致性:统一的 API 接口,降低学习成本
  3. 灵活性:既支持便捷访问,也支持直接操作原生对象
  4. 扩展性:可以通过中间件扩展 ctx 对象的功能
标签:Koa