3
votes

Problème d'importation Apollo Graphql avec la directive cacheControl

J'utilise "graphql-import": "^ 0.7.1"

J'ai essayé d'ajouter la directive @cacheControl à mon schéma graphql

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.

alors il donnait cette erreur -

directive @cacheControl(
  maxAge: Int,
  scope: CacheControlScope
) on OBJECT | FIELD_DEFINITION

enum CacheControlScope {
  PUBLIC
  PRIVATE
}

Donc, après avoir pris des indices du lien -

https://github.com/prisma/graphql-import/issues/153 p>

J'ai ajouté le code ci-dessous

Error: Directive cacheControl: Couldn't find type cacheControl in any of the schemas.

Mais après cela, j'ai commencé à avoir cette erreur -

type Post @cacheControl(maxAge: 240) {
  id: Int!
  title: String
  author: Author
  votes: Int @cacheControl(maxAge: 30)
  readByCurrentUser: Boolean! @cacheControl(scope: PRIVATE)
}

Je suis impossible de trouver comment résoudre ce problème.


2 commentaires

Pouvez-vous essayer de mettre cacheDirective sur un directives.graphql puis l'importer (# import cacheControl de 'directives.graphql') et voir si cela fonctionne?


@jgoday j'ai essayé cela aussi mais ne fonctionne toujours pas


3 Réponses :


0
votes

Où déclarez-vous ces énumérations et directives? J'ai continué à recevoir ces erreurs simplement parce que je les ai mises dans un fichier typedef référencé plus d'une fois. Ensuite, je viens de déplacer ce code vers mon fichier de schéma principal

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,
    ...
})

et le problème a disparu.


0 commentaires

1
votes

Les astuces statiques me donnent les mêmes erreurs, j'ai donc essayé avec des résolveurs dynamiques et cela fonctionne.

Concernant Apollo Docs :

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

 cache control


0 commentaires

0
votes

A également fait face à ce problème et la directive introuvable est due à l'assemblage de schéma. J'ai utilisé le même travail autour de vous que celui utilisé en plaçant la définition de directive et d'énumération dans le schéma lui-même. Lorsque je rencontre cette erreur, j'ai dû passer à au moins 2.6.6 car c'est là qu'ils ont ajouté un correctif pour l'erreur de dupe que vous obtenez réf: https://github.com/apollographql/apollo-server/pull/2762


0 commentaires