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

设置Redis存储的cookie后Apollo Client无法连接服务端问题求助

问题排查步骤

第一步:定位请求卡住的层级

  • 打开浏览器开发者工具的「网络」面板,找到pending状态的GraphQL请求,查看请求头里的Cookie字段是否正常携带,有没有出现Cookie值过大、格式异常的问题
  • 查看该请求的「计时」标签,确认卡住的阶段是在等待服务器响应阶段还是本地连接阶段,排除客户端本身拦截问题
  • 直接用Postman/ApiFox手动携带登录后的Cookie调用http://localhost:5000/graphql接口,看是否同样无响应,如果也卡住说明问题出在服务端,和客户端配置无关

第二步:排查服务端中间件执行顺序问题

你当前的代码里session中间件注册在Apollo Server挂载之前,逻辑是对的,首先要检查有没有漏加必要的express基础中间件:

  • 确认是否加了express.json()中间件,缺失该中间件会导致POST请求的body无法被解析,服务端会一直等待请求数据传输完成,最终卡住。可以在注册session中间件之前加上:
app.use(express.json())

第三步:排查Redis连接/会话存储异常

  • 查看服务端控制台有没有报错日志,如果Redis连接异常,connect-redis获取会话时会卡住,不会返回响应
  • 本地启动redis-cli,执行keys rds:*查看是否有对应登录用户的session存储记录,手动删除该session记录后再发请求,看是否恢复正常
  • 临时注释掉session中间件配置,把Apollo Server的context改为不需要会话的逻辑,测试请求是否正常,确认是否是会话模块导致的问题

第四步:排查CORS与跨域Cookie配置冲突

  • 你当前的sameSite设置为lax,本地开发环境http协议下是没问题的,可以临时把sameSite改为none,同时把secure改为false测试,排除SameSite策略拦截导致的请求异常
  • 检查登录逻辑里设置Cookie的代码,有没有重复设置同名Cookie、或者Cookie值包含特殊字符导致解析失败的情况

第五步:排查Apollo Server上下文与Resolver逻辑异常

  • 在Apollo Server的context函数里加一行打印日志,看请求是否能走到context逻辑:
context: ({ req, res }: any) => {
  console.log('收到请求,sessionId:', req.sessionID)
  return { req, res }
},

如果日志没有打印,说明请求在到达Apollo Server之前就被前面的中间件卡住了,重点排查session、CORS等中间件
如果日志能打印,说明是后续的Resolver执行卡住,检查对应Resolver里有没有拿session里的用户信息查数据库时死锁、或者SQL语句执行超时的情况

内容的提问来源于stack exchange,提问作者Mateusz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:36:08