You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中Apollo Client部分请求禁用缓存失效问题求助

问题解决:Apollo Client Mutation fetchPolicy 不生效,返回重复 Token

核心原因

Apollo Client 的 fetchPolicy 是控制Apollo自身缓存的策略,但你遇到的重复Token问题,本质是Next.js/fetch 层面的请求缓存导致的——HttpLink 底层依赖浏览器的 fetch API,而 Next.js 对 fetch 默认启用了缓存机制,这会让相同的mutation请求被浏览器/Next.js缓存,返回旧的Token。

局部禁用缓存的解决方案

不需要全局修改客户端配置,直接给登录mutation单独添加fetch级别的缓存禁用配置:

方案1:在mutation调用中添加fetchOptions

修改你的登录请求代码,在mutate的配置里加入fetchOptions,仅针对该请求禁用缓存:

const { data } = await getClient().mutate({
  mutation: LOGIN_MUTATION,
  variables: {
    email,
    password,
  },
  // Apollo层面的缓存策略(可选,mutation默认不缓存结果)
  fetchPolicy: "network-only",
  // 关键:禁用fetch/Next.js层面的缓存
  fetchOptions: {
    cache: "no-store"
  }
});

方案2:通过请求头控制缓存

如果更倾向用HTTP标准头来控制,也可以设置Cache-Control头:

const { data } = await getClient().mutate({
  mutation: LOGIN_MUTATION,
  variables: {
    email,
    password,
  },
  fetchOptions: {
    headers: {
      'Cache-Control': 'no-store'
    }
  }
});

额外检查点

  • 确认服务器端没有为登录接口设置过长的Cache-Control响应头,避免浏览器主动缓存响应结果。
  • 确保LOGIN_MUTATION的定义正确,没有意外复用旧的请求参数或缓存数据。

内容的提问来源于stack exchange,提问作者Pierre Olivier Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:04:53