ctx.query和ctx.request.body
在 Egg.js 和 Koa.js 中,ctx 是上下文对象(Context),它是连接请求和响应的核心对象。ctx 对象包含了处理请求所需的所有信息,包括请求和响应数据。下面是 ctx 对象的一些主要属性和方法:
ctx 主要属性和方法
请求相关
ctx.request: 包含了请求的信息,如请求体、查询字符串等。
ctx.method: 请求方法(例如 'GET', 'POST')。
ctx.url: 请求的完整 URL。
ctx.path: 请求路径。
ctx.query: 查询字符串对象,如 { id: '123', name: 'John' }。
ctx.querystring: 查询字符串,如 'id=123&name=John'。
ctx.header: 请求头对象。
ctx.headers: 同 ctx.header。
ctx.body: 请求体,对于 POST 请求,这里通常包含了请求的数据。
ctx.params: 路由参数对象。
ctx.state: 用户可以在中间件间共享的状态对象。
# 响应相关
ctx.status: HTTP 状态码。
ctx.body: 响应体,可以是字符串、Buffer 或对象。
ctx.message: 响应消息。
ctx.type: 响应的 MIME 类型。
ctx.set(name, value): 设置响应头。
ctx.get(name): 获取响应头。
ctx.headerSent: 是否已经发送了响应头。
ctx.length: 响应体的长度,如果是 Buffer 或 Stream。
状态管理
ctx.cookies: Cookie 操作工具,可以设置和获取 Cookie。
ctx.session: 会话管理工具,用于管理用户的会话状态。
错误处理
ctx.throw(status, message, properties): 抛出一个错误,并设置响应状态码。
ctx.onerror(error): 错误处理中间件。
中间件控制
ctx.next(): 调用下一个中间件。
ctx.app: 当前应用实例。
ctx.state: 可以用来在中间件之间传递数据。
其他
ctx.throw(status, message, properties): 抛出一个错误。
ctx.redirect(url): 重定向到指定的 URL。
ctx.assert(condition, status, message): 断言条件,不满足则抛出错误。
ctx.attachment(filename): 设置 Content-Disposition 为 attachment,用于下载文件。