Проблема импорта Apollo Graphql с директивой cacheControl

Я использую "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.

Я не могу понять, как решить эту проблему.


person WitVault    schedule 09.03.2019    source источник
comment
Можете ли вы попробовать поместить cacheDirective в директиву .graphql, а затем импортировать его (# import cacheControl из 'directives.graphql') и посмотреть, работает ли он?   -  person jgoday    schedule 18.03.2019
comment
@jgoday Я тоже пробовал, но все еще не работает   -  person WitVault    schedule 20.03.2019


Ответы (3)


Статические подсказки дают мне те же ошибки, поэтому я пробовал использовать динамические внутри резолверов, и это сработало.

Что касается Документов Apollo:

const resolvers = {
  Query: {
    post: (_, { id }, _, info) => {
      info.cacheControl.setCacheHint({ maxAge: 60, scope: 'PRIVATE' });
      return find(posts, { id });
    }
  }
}

управление кешем

person BartusZak    schedule 25.06.2019

Где вы объявляете перечисление и директиву? Я продолжал получать эти ошибки только потому, что помещал их в файл 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,
    ...
})

и проблема исчезла.

person r9dman    schedule 24.03.2019

Столкнулся с этой проблемой, и директива не была найдена из-за сшивания схемы. Я использовал ту же работу, что и вы, поместив определение директивы и перечисления в саму схему. Когда я столкнулся с этой ошибкой, мне пришлось обновиться как минимум до 2.6.6, потому что именно там они добавили исправление для ошибки дублирования, которую вы получаете ref: https://github.com/apollographql/apollo-server/pull/2762

person Jimmy Muga    schedule 16.07.2019