升级Apollo v4后Context为undefined的问题求助
解决Apollo v4升级后TypeGraphQL AuthChecker中Context为undefined的问题
核心原因
TypeGraphQL的AuthChecker无法获取Apollo v4配置的上下文,是因为两者的上下文传递逻辑未正确关联,或TypeGraphQL的Schema构建配置缺失。
解决方案
1. 升级TypeGraphQL到兼容Apollo v4的版本
确保type-graphql版本适配Apollo v4,至少更新到^1.1.1以上:
npm install type-graphql@latest
2. 配置TypeGraphQL Schema透传Apollo上下文
在buildSchema时添加context配置,将Apollo的执行上下文直接传递给TypeGraphQL的上下文系统:
import { buildSchema } from 'type-graphql'; import { myAuthChecker } from './auth-checker'; import { YourResolvers } from './resolvers'; export const schema = await buildSchema({ resolvers: [YourResolvers], authChecker: myAuthChecker, // 透传Apollo上下文到TypeGraphQL context: ({ context }) => context, });
3. 修正Apollo Server的Context配置
无需嵌套context字段,直接返回上下文对象:
import { startStandaloneServer } from '@apollo/server/standalone'; import { schema } from './schema'; const { url } = await startStandaloneServer(schema, { listen: { port: 3000 }, context: async ({ req }) => { try { const { token } = req.headers; console.log(`Token: ${token}`); // 直接返回上下文对象 return { token }; } catch { return {}; } }, });
4. 确认AuthChecker的泛型与上下文类型匹配
保证MyContext类型和实际返回的上下文结构一致:
export type MyContext = { token?: string; }; export const myAuthChecker: AuthChecker<MyContext> = ({ context }) => { // 此时context可正常获取token return !!context.token; };
关键说明
Apollo v4的上下文传递逻辑与v3不同,TypeGraphQL需要显式配置透传Apollo的执行上下文,完成配置后,AuthChecker就能正确读取你在Apollo中设置的上下文数据。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

