闭包捕获配置生成多等级fetch实例,固化鉴权逻辑、请求头、超时及基础url;按public/user/admin等级差异化注入凭证与权限控制,支持动态更新凭证且接口统一。

直接用闭包捕获局部配置生成多等级 fetch 实例,核心是把鉴权逻辑、请求头、超时、基础 URL 等配置“固化”进函数作用域,让每个实例行为独立、调用简洁、无需重复传参。
封装带等级的 fetch 工厂函数
定义一个工厂函数,接收鉴权等级(如 "public"、"user"、"admin")和可选配置,返回专属 fetch 实例:
- 在工厂内一次性读取 token、role、baseURL、timeout 等,避免每次请求都查 localStorage 或计算
- 不同等级对应不同 header 策略:public 不带 token;user 带 Bearer;admin 额外加
X-Auth-Level: admin - 闭包内预编译常用 headers 对象或 Headers 实例,减少运行时开销
按等级注入差异化鉴权逻辑
每个 fetch 实例内部根据捕获的等级决定如何处理凭证和权限上下文:
-
user 级:自动从 localStorage 读 token,注入
Authorization: Bearer xxx,若无 token 则拒绝请求(抛错或返回 401 模拟) -
admin 级:除 token 外,检查
admin_token是否存在;若存在,优先使用,并追加X-Admin-Nonce时间戳防重放 - public 级:显式清除 credentials 和敏感 header,确保不泄露任何用户上下文
支持运行时动态更新凭证而不重建实例
闭包内不直接持有 token 字符串,而是捕获一个“凭证获取函数”,便于登录态变更后无缝生效:
- 例如捕获
() => store.getters.token而非localStorage.getItem('token') - 这样 token 刷新后,下次 fetch 调用自动拿到新值,无需重新生成 fetch 实例
- 对 admin 场景,还可捕获
isCurrentAdmin()函数,实现角色实时校验
组合基础能力,保持接口统一
所有等级 fetch 实例对外保持与原生 fetch 一致的签名 (input, init?),内部通过闭包复用增强逻辑:
- 自动合并传入的
init.headers与等级默认头,Headers 实例用.set()安全覆盖 - 内置超时控制:调用前启动
AbortController,超时自动中断请求 - 错误标准化:网络失败、4xx/5xx 均统一包装为
{ ok: false, status, data: null, error: msg }格式










