[Solved] UnhandledPromiseRejectionWarning: Error: You must `await server.start()` before calling `server.applyMiddleware()` at ApolloServer
While trying to start nestJs server you may face an error that says,
UnhandledPromiseRejectionWarning: Error: You must await server.start() before calling server.applyMiddleware() at ApolloServer
In this article, we are going to show several easy solutions to solve the error.
Solution 1: downgrade to apollo-server-express@^2
First, you need to uninstall the old apollo-server-[integrations] package and replace it with the new version 2.0 of apollo-server in this case. If you're using Express, you may do so by running:
npm uninstall --save apollo-server-express npm i apollo-server@2.0.0 graphql //or use any of your required version above @2
The built-in server in Apollo Server 2.0 eliminates the need to start a server (e.g., Express, Koa, etc.).
Solution 2: Using apollo-server-express@^3.0.0
The latest version of apollo-server-express@^3.0.0 has already fixed the issue. So you can use the version and run your server without any error.
npm i apollo-server@3.1.1 //or use any of your required version above @3
Solution 3: Use await server.start() (for express)
First, you need to install any apollo version above @2. You can try v2.22.0-alpha.0 or whichever Apollo Server packages your program directly depends on. To install alpha run
npm install apollo-server-express@2.22.0-alpha.0 apollo-server-core@2.22.0-alpha.0
That should be enough If you're using the apollo-server package and calling listen().
For apollo-server-express, you have to add await server.start() between server = new ApolloServer and server.applyMiddleware. This call is optional, however, it is required to provide enhanced error handling. The whole code will be
const apolloServer = new ApolloServer({
introspection: true,
schema: await buildSchema({
resolvers: [__dirname + '/resolvers/**/*.js'],
validate: false
}),
context: ({ req, res }) => ({
req,
res,
redis: redisClient
}),
formatError
});
// added this line to await server start
await apolloServer.start();
apolloServer.applyMiddleware({
app,
cors: false
});
Thank you for reading the article. Hope the provided solutions will solve your error.