Как я могу получить кэшированные данные снаружи, используя apollo-server-cache? - PullRequest
0 голосов
/ 26 февраля 2020

apollo-server-cache и apollo-server-plugin-response-cache отлично работают в системах apollo-server и GraphQL.

Теперь я хочу получить кэшированные данные снаружи, но все еще используя apollo-server-cache. «Снаружи» означает получение кэшированных данных в REST API или в обработчик событий pubsub. Код здесь:

server.ts:

import { ApolloServer, makeExecutableSchema } from 'apollo-server-express';
import express from 'express';
import responseCachePlugin from 'apollo-server-plugin-response-cache';
import { typeDefs } from './typeDefs';
import { resolvers } from './resolvers';
import { context } from './context';
import http from 'http';
import { cache } from './cache';

async function createServer(): Promise<http.Server> {
  const port = process.env.PORT || 3001;
  const app = express();
  const graphqlPath = '/graphql';
  const schema = makeExecutableSchema({ typeDefs, resolvers });
  const server = new ApolloServer({
    schema,
    context,
    plugins: [responseCachePlugin()],
    cacheControl: {
      defaultMaxAge: 30,
    },
    cache,
  });

  app.get('/test-cache', (req, res) => {
    const val = cache.get('?');
  });

  server.applyMiddleware({ app, path: graphqlPath });

  return app.listen(port, () => {
    console.log(`Apollo server is listening on http://localhost:${port}${graphqlPath}`);
  });
}

export { createServer };

cache.ts:

import { RedisCache } from 'apollo-server-cache-redis';

const cache = new RedisCache({
  port: Number.parseInt(process.env.REDIS_PORT || '6379', 10),
  host: process.env.REDIS_HOST || '127.0.0.1',
  family: 4,
  db: process.env.REDIS_DB || 0,
});

export { cache };

Как видите, я хочу получить кэшированные данные в /test-cache REST API. Проблема в том, что я не знаю ключ кеша. Ключ кеша рассчитывается на основе запроса graphql, исходный код . Это возможно? Как использовать кэшированные данные вне apollo-server и GraphQL?

...