柯里化在统一请求网关中分层预设公共参数:单层固化 baseURL,两层叠加 authToken,三层封装 get/post 方法,并统一注入错误处理、响应解析与超时控制等增强逻辑。

用柯里化在统一请求网关中预设核心公共参数,本质是把“变”和“不变”的部分分层剥离——域名、认证、默认头、超时等固定项提前固化,接口路径和业务数据留到最后传。这样既避免重复写 baseurl 或 token,又保持调用简洁清晰。
单层固化:锁定基础地址与环境
最基础也最常用。只需一个函数接收 baseURL,返回另一个专用于发请求的函数:
- 参数顺序按实际使用频率排:先定地址,再定路径,最后补配置
- 生成不同环境实例非常直观:const devApi = createRequest('https://api.dev.com'),const prodApi = createRequest('https://api.prod.com')
- 调用时只关心业务路径:devApi({ path: '/login', method: 'POST', body: { u: 'a', p: 'b' } })
两层固化:叠加认证信息(如 Token)
当所有请求都需携带 Authorization 头,又不想每次手动加,就再包一层:
- 第一层收 baseURL,第二层收 authToken,返回最终可调用的请求函数
- 生成带认证的实例:const userApi = createRequest('https://api.example.com')('xyz789')
- 后续调用自动带上 Bearer Token:userApi({ path: '/profile' }),userApi({ path: '/orders', method: 'GET' })
- 注意 token 过期场景:可配合刷新逻辑,在第二层返回前做有效性检查,或让上层负责更新 token 后重建实例
三层语义化:封装 get/post 等方法,形成自然调用链
进一步提升可读性,把 HTTP 方法也固化为属性,让调用像读句子:
- 第三层不再接收 options 对象,而是直接提供 .get(path)、.post(path, data) 等方法
- 例如:const api = createRequest('https://api.v2')('token123'),然后 api.get('/users') 或 api.post('/users', { name: 'Tom' })
- 好处是接口职责明确,团队协作时不容易错传 method 或漏写 body 类型
- 默认 headers(如 Content-Type)可在此层统一注入,但允许调用时用 headers 字段覆盖
配套增强:错误处理与响应标准化可统一注入
柯里化本身不处理副作用,但可以在每一层返回的函数中嵌入通用逻辑:
- 在最内层 fetch 调用后统一拦截 4xx/5xx,抛出结构化错误对象,而不是裸 response
- 对成功响应自动解析 JSON,并提取 data 字段(适配后端统一返回格式如 { code: 0, data: … })
- 超时控制、请求取消信号(AbortController)也可在底层注入,无需每个接口单独写
- 调试支持:开启 debug 模式时自动打印请求 URL、method 和耗时

















