File tree 3 files changed +37
-8
lines changed
3 files changed +37
-8
lines changed Original file line number Diff line number Diff line change 1
1
const { ApolloServer } = require ( 'apollo-server-cloudflare' )
2
2
const { graphqlCloudflare } = require ( 'apollo-server-cloudflare/dist/cloudflareApollo' )
3
3
4
+ const KVCache = require ( '../kv-cache' )
4
5
const PokemonAPI = require ( '../datasources/pokeapi' )
5
6
const resolvers = require ( '../resolvers' )
6
7
const typeDefs = require ( '../schema' )
@@ -9,14 +10,20 @@ const dataSources = () => ({
9
10
pokemonAPI : new PokemonAPI ( ) ,
10
11
} )
11
12
12
- const server = new ApolloServer ( {
13
- typeDefs,
14
- resolvers,
15
- introspection : true ,
16
- dataSources,
17
- } )
13
+ const kvCache = { cache : new KVCache ( ) }
14
+
15
+ const createServer = graphQLOptions =>
16
+ new ApolloServer ( {
17
+ typeDefs,
18
+ resolvers,
19
+ introspection : true ,
20
+ dataSources,
21
+ ...( graphQLOptions . enableKvCache ? kvCache : { } ) ,
22
+ } )
18
23
19
- const handler = ( request , _graphQLOptions ) =>
20
- graphqlCloudflare ( ( ) => server . createGraphQLServerOptions ( request ) ) ( request )
24
+ const handler = ( request , graphQLOptions ) => {
25
+ const server = createServer ( graphQLOptions )
26
+ return graphqlCloudflare ( ( ) => server . createGraphQLServerOptions ( request ) ) ( request )
27
+ }
21
28
22
29
module . exports = handler
Original file line number Diff line number Diff line change @@ -26,6 +26,12 @@ const graphQLOptions = {
26
26
// allowOrigin: '*',
27
27
// allowMethods: 'GET, POST, PUT',
28
28
// },
29
+
30
+ // Enable KV caching for external REST data source requests
31
+ // Note that you'll need to add a KV namespace called
32
+ // WORKERS_GRAPHQL_CACHE in your wrangler.toml file for this to
33
+ // work! See the project README for more information.
34
+ enableKvCache : false
29
35
}
30
36
31
37
const handleRequest = async request => {
Original file line number Diff line number Diff line change
1
+ class KVCache {
2
+ get ( key ) {
3
+ return WORKERS_GRAPHQL_CACHE . get ( key )
4
+ }
5
+
6
+ set ( key , value , options ) {
7
+ const opts = { }
8
+ const ttl = options && options . ttl
9
+ if ( ttl ) {
10
+ opts . expirationTtl = ttl
11
+ }
12
+ return WORKERS_GRAPHQL_CACHE . put ( key , value , opts )
13
+ }
14
+ }
15
+
16
+ module . exports = KVCache
You can’t perform that action at this time.
0 commit comments