跳到主要内容

Context 属性参考

本页列出 context 对象的完整属性定义,供中间件开发时查阅。

顶层属性

属性描述
context.requestHTTP 请求参数(URL、方法、请求头、请求体等)
context.response[Readonly] HTTP 响应代理对象,可多次读取响应体
context.res原始 Fetch Response 对象
context.options通过 .option() 设置的自定义选项
context.output[Writeonly] 覆盖 await request.get(...) 的最终解析值,仅在默认解析模式下生效
context.data请求级别的共享数据,在请求完成后自动清理
context.global全局共享数据,不会随请求结束而销毁
context.orchestration[Readonly] 详见进阶 - 中间件调度与执行
context.locationId[Readonly] 请求代码的位置标识(文件路径+行号)

context.request

包含发送 HTTP 请求所需的所有参数:

属性描述
context.request.url请求 URL 对象
context.request.__url__只读 合并了路由参数后的完整请求 URL
context.request.methodHTTP 方法('get', 'post', 'put', 'patch', 'delete', 'head', 'options')
context.request.headers请求头(Headers 对象)
context.request.body请求体
context.request.pathParameters路由参数对象
context.request.abort()中止当前请求
context.request.credentialsFetch API 的 credentials 选项
context.request.modeFetch API 的 mode 选项
context.request.cacheFetch API 的 cache 选项
context.request.redirectFetch API 的 redirect 选项
context.request.referrerFetch API 的 referrer 选项
context.request.referrerPolicyFetch API 的 referrerPolicy 选项
context.request.integrityFetch API 的 integrity 选项
context.request.keepaliveFetch API 的 keepalive 选项

路由参数

使用 context.request.pathParameterscontext.request.__url__ 处理路由参数:

import { request } from "keq"

request.use(async (context, next) => {
  console.log("原始 URL:", context.request.url.href)
  console.log("路由参数:", context.request.pathParameters)
  console.log("实际 URL:", context.request.__url__.href)

  await next()
})

await request.get("/users/{id}").params("id", "123")
// 原始 URL: /users/{id}
// 路由参数: { id: "123" }
// 实际 URL: /users/123

context.response

context.response 是原始 Response 对象的代理,解决了 Response 对象的方法(如 .json().text())只能调用一次的限制,允许多个中间件安全地读取响应体。

context.res

context.res 是原始的 Fetch Response 对象。大多数情况下应该使用 context.response,只有在需要访问原始 Response 对象时才使用 context.res

context.output

[Writeonly] 允许中间件覆盖 await request.get(...) 的最终解析值。

默认情况下,Keq 根据响应的 Content-Type 自动解析响应体(intelligent 模式)。设置 context.output 后,自动解析被跳过,调用者直接拿到该值。

仅当 resolveWith 未设置或为 'intelligent' 时生效。若调用者使用了 .resolveWith('json') 等指定模式,context.output 会被忽略。

context.options

通过 .option() 方法设置的自定义选项。

内置选项及其默认值:

选项默认值描述
context.options.fetchAPIglobal.fetch用于发送请求的 Fetch API 实现
context.options.resolveWith"intelligent"响应体解析方式
context.options.retry.timesundefined重试次数
context.options.retry.delayundefined重试延迟时间(毫秒)
context.options.retry.onundefined自定义重试条件函数
context.options.timeoutundefined超时配置对象({ millisecond: number }
context.options.flowControlundefined并发控制模式

context.data

请求级别的共享数据对象,用于在同一请求的多个中间件之间共享数据。请求完成后自动销毁。

context.global

全局共享数据,不会随请求结束而销毁。使用时需要特别注意内存管理。

import { KeqMiddleware } from "keq"

const key = Symbol('myMiddleware')

const middleware: KeqMiddleware = async (context, next) => {
  context.global[key] = { startTime: Date.now() }

  try {
    await next()
  } finally {
    delete context.global[key]
  }
}

context.orchestration

中间件编排器,提供中间件执行状态和 fork 能力,详见进阶 - 中间件调度与执行