@@ -142,7 +142,7 @@ Let us start by extracting the schema definition to file
142142<i >schema.js</i >
143143
144144``` js
145- const { gql } = require (' apollo- server' )
145+ const { gql } = require (' @ apollo/ server' )
146146
147147const typeDefs = gql `
148148 type User {
@@ -198,7 +198,7 @@ module.exports = typeDefs
198198The resolvers definition is moved to the file <i >resolvers.js</i >
199199
200200``` js
201- const { UserInputError , AuthenticationError } = require (' apollo- server' )
201+ const { UserInputError , AuthenticationError } = require (' @ apollo/ server' )
202202const jwt = require (' jsonwebtoken' )
203203const Person = require (' ./models/person' )
204204const User = require (' ./models/user' )
@@ -311,15 +311,18 @@ module.exports = resolvers
311311Next we will replace Apollo Server with [ Apollo Server Express] ( https://www.apollographql.com/docs/apollo-server/integrations/middleware/#apollo-server-express ) . Following libraries are installed
312312
313313```
314- npm install apollo-server- express apollo-server-core express @graphql-tools/schema
314+ npm install express cors body-parser @graphql-tools/schema
315315```
316316and the file <i >index.js</i > changes to:
317317
318318``` js
319- const { ApolloServer } = require (' apollo-server-express' )
320- const { ApolloServerPluginDrainHttpServer } = require (' apollo-server-core' )
319+ const { ApolloServer } = require (' @apollo/server' )
320+ const { expressMiddleware } = require (' @apollo/server/express4' )
321+ const { ApolloServerPluginDrainHttpServer } = require (' @apollo/server/plugin/drainHttpServer' )
321322const { makeExecutableSchema } = require (' @graphql-tools/schema' )
322323const express = require (' express' )
324+ const cors = require (' cors' )
325+ const bodyParser = require (' body-parser' )
323326const http = require (' http' )
324327
325328const jwt = require (' jsonwebtoken' )
@@ -367,14 +370,27 @@ const start = async () => {
367370 },
368371 plugins: [ApolloServerPluginDrainHttpServer ({ httpServer })],
369372 })
373+
374+ app .use (
375+ ' /' ,
376+ cors (),
377+ bodyParser .json (),
378+ expressMiddleware (server, {
379+ context: async ({ req }) => {
380+ const auth = req ? req .headers .authorization : null
381+ if (auth && auth .toLowerCase ().startsWith (' bearer ' )) {
382+ const decodedToken = jwt .verify (auth .substring (7 ), JWT_SECRET )
383+ const currentUser = await User .findById (decodedToken .id ).populate (
384+ ' friends'
385+ )
386+ return { currentUser }
387+ }
388+ },
389+ }),
390+ );
370391
371392 await server .start ()
372393
373- server .applyMiddleware ({
374- app,
375- path: ' /' ,
376- })
377-
378394 const PORT = 4000
379395
380396 httpServer .listen (PORT , () =>
0 commit comments