使用apollo-server-micro搭建Apollo GraphQL服务器时缓存功能异常及cacheControl未定义错误问题
解决Apollo Server Micro中
cacheControl未定义的问题 我来帮你搞定这个报错!你遇到的Cannot read property 'cacheControl' of undefined问题,核心是Apollo Server的配置冲突导致cacheControl上下文没有正确初始化,咱们一步步来修复:
1. 移除重复的resolvers配置
看你的Apollo Server初始化代码,你已经通过makeExecutableSchema生成了包含typeDefs和resolvers的schema,但又在new ApolloServer()里重复传了resolvers参数,这会导致Apollo Server的内部配置混乱,进而无法为info对象注入cacheControl属性。
修改后的服务器代码:
import { ApolloServer, makeExecutableSchema } from "apollo-server-micro"; import responseCachePlugin from 'apollo-server-plugin-response-cache'; const typeDefs = require("../../apolloserver/schema"); const { Query } = require("../../apolloserver/resolvers"); const resolvers = { Query }; const schema = makeExecutableSchema({ typeDefs, resolvers }); const apolloServer = new ApolloServer({ schema, context(ctx) { return {...ctx, prisma}; }, // 删掉这里的resolvers,schema已经包含了 plugins: [responseCachePlugin()] }); export const config = { api: { bodyParser: false, }, }; export default apolloServer.createHandler({ path: "/api/graphql" });
2. 确保@cacheControl指令可用
虽然Apollo Server通常会自动注入@cacheControl指令,但如果你是手动生成schema,有时候需要显式在typeDefs里定义它,避免解析器无法识别相关功能。在你的schema文件里加上这行:
directive @cacheControl(maxAge: Int, scope: CacheScope) on FIELD_DEFINITION | OBJECT | INTERFACE
3. 升级依赖包(可选但推荐)
旧版本的apollo-server-micro可能存在cacheControl的兼容性问题,建议升级到最新稳定版:
npm update apollo-server-micro apollo-server-plugin-response-cache graphql
4. 显式配置cacheControl(可选)
你可以在Apollo Server配置里添加cacheControl选项,明确默认缓存行为,进一步确保功能正常:
const apolloServer = new ApolloServer({ schema, context(ctx) { return {...ctx, prisma}; }, cacheControl: { defaultMaxAge: 5, // 设置全局默认缓存时间 stripFormattedExtensions: false, }, plugins: [responseCachePlugin()] });
做完这些修改后,再测试你的解析器,info.cacheControl.setCacheHint()应该就能正常工作了,不会再出现未定义的错误。
内容的提问来源于stack exchange,提问作者Peter Kellner
相关产品推荐
相关产品推荐

