GraphQLError: Query root type must be provided

38.7k views Asked by At

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

6

There are 6 answers

1
Jay McDoniel On BEST ANSWER

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!';
  }
}
2
JfrogT On

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 {}
0
Yilmaz On

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 {}
0
A. Britvin On

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';
0
Mike Caballero On

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

0
icc97 On

I hit this when working through the Nest.js GraphQL tutorial as 'Schema first'.

As specified in the Schema first section of quick start, I still needed to set the typePaths and definitions options:

@Module({
  imports: [
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      typePaths: ['./**/*.graphql'],
      definitions: {
        path: join(process.cwd(), 'src/graphql.ts'),
        outputAs: 'class',
      },
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})

This should then find any *.graphql file that you have created.