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
?