常见错误是 error: connect econnrefused 127.0.0.1:6379,说明 node 进程根本连不上 redis,根本原因是 redis 服务未启动,而非配置错误;本地调试时 localhost 可能因 vscode 运行环境(docker/wsl/远程容器)指向错误的 loopback,应使用 redis-cli -h 127.0.0.1 -p 6379 ping 验证连通性,并确保 redis-server 已运行且网络命名空间一致。

Redis 连接失败时 redis.createClient() 报什么错
常见错误是 Error: connect ECONNREFUSED 127.0.0.1:6379,说明 Node 进程根本连不上 Redis。不是配置写错,而是 Redis 根本没跑起来。
本地调试时别直接写 redis://localhost:6379 或 127.0.0.1 —— VSCode 的调试环境可能走 Docker、WSL 或远程容器,localhost 指向的是当前进程所在环境的 loopback,不一定是你的 Redis 实例。
- 用
redis-cli -h 127.0.0.1 -p 6379 ping在终端里确认 Redis 是否可连(注意:这个终端要和 Node 进程在同一个网络命名空间) - VSCode 启动调试前,先检查
redis-server是否已运行;若用 Docker,确保容器暴露了6379端口且 network mode 正确(如host或自定义 bridge) - 推荐显式传入
socket配置而非 host/port,比如:redis.createClient({ socket: { host: 'redis', port: 6379 } }),配合docker-compose.yml中 service 名解析
connect-redis 初始化失败导致 session 不写入
典型表现:每次刷新页面,req.session.id 都变,但 Redis 里查不到任何 key。问题出在 store 实例没正确创建或未传入 session() 中。
connect-redis@6+ 和旧版 API 差异很大:新版必须传 client 实例,且 client 需提前调用 connect();旧版允许直接传 url 或 host/port。
批量分析录音转写,输出多维度拓客报告。触发词:录音分析、总结、音频总结、拜访记录总结。当用户提及「分析录音」「看看录音数据」「最近的录音」「通话记录」且意图为批量统计/分析时触发。仅出现「录音」或「拜访」时需结合上下文,若仅查看单条详情则不触发。
- 确认版本:
npm list connect-redis,若 ≥6.0,则必须手动await redisClient.connect()再传给new RedisStore({ client: redisClient }) - 不要漏掉
store字段:app.use(session({ store: new RedisStore({ client: redisClient }), ... })),缺了它就回退到内存存储 - 检查 Redis 客户端是否处于 ready 状态:打印
redisClient.isOpen或监听'ready'事件再挂载中间件
VSCode 调试时 session cookie 不生效的几个硬坑
浏览器发请求,Node 收到了,但 req.session 始终为空,或者 Set-Cookie 头根本没出现在响应里 —— 很可能是 Express 中间件顺序或 cookie 配置冲突。
-
express-session必须放在app.use(express.json())和app.use(express.urlencoded())之后,但要在所有路由app.use('/api', router)之前,否则 session 解析被跳过 - 本地开发用 HTTP 协议时,千万别设
cookie.secure: true,否则浏览器拒绝保存 cookie(会静默丢弃Set-Cookie) - 如果前端是 React/Vue 开发服务器(如
localhost:3000),后端是localhost:3001,需配cookie.sameSite: 'none'+cookie.secure: false(仅限开发),否则跨端口请求不带 cookie - VSCode 的调试配置(
launch.json)里若用了env覆盖了NODE_ENV,可能导致某些中间件行为变化(比如 production 下默认启用secure)
Redis 存的 session key 长什么样,怎么手动查
Redis 里实际存的 key 是 sess:<sessionid></sessionid>,比如 sess:abc123xyz,value 是序列化后的 JSON 字符串,含 cookie、passport、自定义字段等。
调试时想验证 session 是否真写进去了,别只看代码逻辑,直接连 Redis 查:
- 命令行:
redis-cli keys "sess:*"看有没有匹配 key - 查具体内容:
redis-cli get "sess:abc123xyz",结果是类似{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/","sameSite":"lax"},"user":"admin"} - 注意 TTL:如果设置了
cookie.maxAge,Redis key 会自动带过期时间;没设则默认永不过期(除非 Redis 内存淘汰策略触发) - 别用 GUI 工具盲目删 key ——
connect-redis默认用SETEX写入,删了就真丢了,没回收机制










