I would like to export the ApolloServer
function to be imported later in a test suite or simply within the index.ts
file.
Working code:
// src/index.ts
;(async () => {
const app = express()
await createConnections()
const apolloServer = new ApolloServer({
schema: await buildSchema({
resolvers: [HelloWorldResolver, MovieResolver],
}),
context: ({ req, res }) => ({ req, res }),
})
apolloServer.applyMiddleware({ app, cors: false })
app
.listen({ port: ENVIRONMENT.port, host: ENVIRONMENT.host }, () => {
console.log(
`Server ready at http://${ENVIRONMENT.host}:${ENVIRONMENT.port}/graphql`
)
})
.on('error', function (error) {
console.log(`Failed starting server: ${error}`)
})
})()
I tried to extract this to a separate file:
// src/apolloServer.ts
export const apolloServer = (async () => {
return new ApolloServer({
schema: await buildSchema({
resolvers: [HelloWorldResolver, MovieResolver],
}),
context: ({ req, res }) => ({ req, res }),
})
})()
And consume it:
// src/index.ts
import { apolloServer } from './apolloServer'
apolloServer.applyMiddleware({ app, cors: false })
The error thrown is:
(node:13848) UnhandledPromiseRejectionWarning: TypeError: apolloServer_1.apolloServer.applyMiddleware is not a function
How is it possible to export and import this function?
build a function to generate brand new ApolloServer instance. run the function anywhere else to generate a brand new ApolloServer
// src/apolloServer.ts
export const getApolloServer = async () => {
return new ApolloServer({
schema: await buildSchema({
resolvers: [HelloWorldResolver, MovieResolver],
}),
context: ({ req, res }) => ({ req, res }),
})
}
// src/index.ts
import { getApolloServer } from './apolloServer'
const clonedServer = await getApolloServer();
clonedServer.applyMiddleware({ app, cors: false })