GraphQLError: Query root type must be provided

Viewed 17887

I'm using NestJS, TypeORM and GraphQL for my backend API. I'm getting the following error:

GraphQLError [Object]: Query root type must be provided.
      at SchemaValidationContext.reportError (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/type/validate.js:88:19)
      at validateRootTypes (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/type/validate.js:107:13)
      at validateSchema (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/type/validate.js:52:3)
      at graphqlImpl (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/graphql.js:79:62)
      at /home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/graphql.js:28:59
      at new Promise (<anonymous>)
      at Object.graphql (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/graphql.js:26:10)
      at GraphQLSchemaFactory.<anonymous> (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/@nestjs/graphql/dist/schema-builder/graphql-schema.factory.js:49:52)
      at Generator.next (<anonymous>)
      at /home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/tslib/tslib.js:114:75

This is what my file structure and code looks like: enter image description here

Can someone please help me. My repo: https://github.com/wise-introvert/nestjs-graphql-api.git

5 Answers

All servers running with GraphQL must have at least one @Query() to be considered a valid GraphQL server. Without it, the apollo-server package will throw an exception and the server will fail to start. This can be as simple as

@Resolver()
export class FooResolver {

  @Query(() => String)
  sayHello(): string {
    return 'Hello World!';
  }
}

Also ensure the Resolver is added in the module providers

@Module({
  imports: [
    GraphQLModule.forRoot({
      installSubscriptionHandlers: true,
      autoSchemaFile: true,
    }),
  ],
  controllers: [],
  providers: [FooResolver], //< This
})
export class FooModule {}

This answer is not a direct answer to the question.

But if you are facing the described problem and the answers don't help, recheck if you are using the correct imports:

// Correct
import { Resolver, Query } from '@nestjs/graphql';

// Incorrect in NestJS
import { Resolver, Query } from 'type-graphql';

In my case I had nfts.module.ts which is registered in app.module.ts but it was not configured properly. I had to pass providers

@Module({ providers: [NftsResolver, NftsService] })
export class NftsModule {}

In my case, I forgot to add my resolver file on the providers array on my Module.

After running it again, everything went fine and schema.gql file was created at the same time.

Just make sure to add both Service and Resolver to your providers. :D

Related