我正在使用"graphql-import": "^0.7.1"
我试图将@cacheControl
指令添加到我的graphql模式
type Post @cacheControl(maxAge: 240) {
id: Int!
title: String
author: Author
votes: Int @cacheControl(maxAge: 30)
readByCurrentUser: Boolean! @cacheControl(scope: PRIVATE)
}
然后它给出了这个错误-
Error: Directive cacheControl: Couldn't find type cacheControl in any of the schemas.
因此,从链接获取提示后-
https://github.com/prisma/graphql-import/issues/153
我在下面的代码中添加了
directive @cacheControl(
maxAge: Int,
scope: CacheControlScope
) on OBJECT | FIELD_DEFINITION
enum CacheControlScope {
PUBLIC
PRIVATE
}
但是之后,我开始出现此错误-
Error: There can be only one type named "CacheControlScope".
Enum value "CacheControlScope.PUBLIC" can only be defined once.
Enum value "CacheControlScope.PRIVATE" can only be defined once.
我不知道如何解决此问题。
答案 0 :(得分:1)
静态提示也给了我相同的错误,因此我尝试在解析器中使用动态提示,并且可以正常工作。
关于Apollo Docs:
const resolvers = {
Query: {
post: (_, { id }, _, info) => {
info.cacheControl.setCacheHint({ maxAge: 60, scope: 'PRIVATE' });
return find(posts, { id });
}
}
}
答案 1 :(得分:0)
您在哪里声明这些枚举和指令? 我一直收到这些错误,只是因为我将它们放入一个被多次引用的typedef文件中。 然后,我将这段代码移到了主模式文件中
const CacheControl = gql`
enum CacheControlScope {
PUBLIC
PRIVATE
}
directive @cacheControl (
maxAge: Int
scope: CacheControlScope
) on FIELD_DEFINITION | OBJECT | INTERFACE
`
...
const typeDefs = [
CacheControl,
...
]
const server = new ApolloServer({
typeDefs,
...
})
问题消失了。
答案 2 :(得分:0)
也解决了这个问题,并且由于模式缝合而导致找不到指令。我通过在架构本身中放置指令和枚举定义来进行相同的工作。当我遇到该错误时,我必须至少升级到2.6.6,因为那是他们在其中添加了针对dupe错误的修复程序,您正在获得引用:https://github.com/apollographql/apollo-server/pull/2762