TypeScript GraphQL Redis项目设置session.userId触发类型错误求助
问题排查与解决
1. 核心类型定义错误(最关键)
你的types.ts里把session的类型错误定义成了Express.SessionStore——这是会话存储的类型,并非请求上的会话对象类型。正确的类型应该是Express.Session,同时要结合你扩展的SessionData:
修改types.ts:
import { EntityManager, IDatabaseDriver, Connection } from "@mikro-orm/core" import { Request, Response } from "express" import { Session } from "express-session" // 保留你之前扩展的SessionData declare module "express-session" { interface SessionData { userId: number | string | undefined; } } export type MyContext = { em: EntityManager<any> & EntityManager<IDatabaseDriver<Connection>> req: Request & { session: Session & Partial<SessionData> }; res: Response; }
2. 修复user.id的序列化问题
Redis无法直接序列化BigInt类型,如果你的MikroORM实体User的id是BigInt类型,赋值给req.session.userId时会触发类型错误。解决方法二选一:
- 转为数字存储:
req.session.userId = Number(user.id); - 转为字符串存储:
req.session.userId = user.id.toString();
3. Redis客户端初始化优化
避免用as any强制类型转换,正确初始化本地Redis客户端:
// main.ts里的Redis客户端初始化部分 const redisClient = redis.createClient({ url: "redis://localhost:6379" }); await redisClient.connect();
确保connect-redis版本与@redis/client版本兼容(推荐connect-redis@7.x搭配@redis/client@4.x)。
内容的提问来源于stack exchange,提问作者Vikash
相关产品推荐
相关产品推荐

