Thursday 29 October 2020

Apollo GraphQL Server - Access query params from cache plugin

I have an Apollo GraphQL server using the apollo-server-plugin-response-cache plugin and I need to determine whether or not I'm going to write to the cache based on incoming parameters. I have the plugin set up and I'm using the shouldWriteToCache hook. I can print out the GraphQLRequestContext object that gets passed into the hook, and I can see the full request source, but request.variables is empty. Other than parsing the query itself, how can I access the actual params for the resolver in this hook? (In the example below, I need the value of param2.)

Apollo Server:

new ApolloServer({
    introspection: true,
    playground: true,
    subscriptions: false,
    typeDefs,
    resolvers,
    cacheControl: {
        defaultMaxAge: 60
    },
    plugins: [
        apolloServerPluginResponseCache({
            cache,  // This is a "apollo-server-cache-redis" instance
            shouldWriteToCache: (requestContext) => {
                
                // I get a lot of info here, including the source query, but not the 
                // parsed out query variables
                console.log(requestContext.request);
                
                // What I want to do here is:
                return !context.request.variables.param2
                // but `variables` is empty, and I can't see that value parsed anywhere else
            }
        })
    ]
})

Here is what I get logged out from the code above:

{
  query: '{\n' +
    '  exapi(param1: "value1", param2: true) {\n' +
    '    records\n' +
    '  }\n' +
    '}\n',
  operationName: null,
  variables: {},            // <-- this is empty?! How can I get param2's value??
  extensions: undefined,
  http: Request {
    size: 0,
    timeout: 0,
    follow: 20,
    compress: true,
    counter: 0,
    agent: undefined,
    [Symbol(Body internals)]: { body: null, disturbed: false, error: null },
    [Symbol(Request internals)]: {
      method: 'POST',
      redirect: 'follow',
      headers: [Headers],
      parsedURL: [Url],
      signal: null
    }
  }
}


from Apollo GraphQL Server - Access query params from cache plugin

No comments:

Post a Comment