Я использую "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.
Я не могу понять, как решить эту проблему.
@jgoday Я тоже так пробовал, но все равно не работает


Где вы объявляете эти перечисления и директивы? Я продолжал получать эти ошибки только потому, что поместил их в файл 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,
...
})
и проблема исчезла.
Статические подсказки дают мне те же ошибки, поэтому я пробовал динамические подсказки внутри распознавателей, и это работает.
Относительно Документы Аполлона:
const resolvers = {
Query: {
post: (_, { id }, _, info) => {
info.cacheControl.setCacheHint({ maxAge: 60, scope: 'PRIVATE' });
return find(posts, { id });
}
}
}
Столкнулся с этой проблемой, и не найденная директива связана со сшиванием схемы. Я использовал ту же работу, что и вы, поместив определение директивы и перечисления в саму схему. Когда я столкнулся с этой ошибкой, мне пришлось обновиться как минимум до 2.6.6, потому что именно там они добавили исправление для ошибки дублирования, которую вы получаете ref: https://github.com/apollographql/аполло-сервер/pull/2762
Можете ли вы попробовать поместить cacheDirective в directives.graphql, а затем импортировать его (# import cacheControl from 'directives.graphql') и посмотреть, работает ли он?