Проблема импорта Apollo Graphql с директивой cacheControl - PullRequest
3 голосов
/ 09 марта 2019

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

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

Ответы [ 3 ]

1 голос
/ 25 июня 2019

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

Относительно Документы Apollo :

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

cache control

0 голосов
/ 16 июля 2019

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

0 голосов
/ 25 марта 2019

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

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

...