首页 > 解决方案 > 如何使用 apollo-server-cache 在外部获取缓存数据?

问题描述

和在GraphQL系统中运行apollo-server-cache良好。apollo-server-plugin-response-cacheapollo-server

现在,我想在外面获取缓存的数据,但仍然使用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-cacheREST API 中获取缓存的数据。问题是我不知道缓存键。缓存键是根据graphql请求计算的,源码。这可能吗?我应该如何在外面使用缓存的apollo-server数据GraphQL

标签: node.jscachinggraphqlapollo-server

解决方案


推荐阅读