Estoy tratando de configurar una API GraphQL muy pequeña usando NestJS 8. Instalé todas las redenciones requeridas de la documentación, pero cuando inicio el servidor, aparece este error:
[Nest] 22727 - 10/30/2021, 10:11:10 AM LOG [NestFactory] Starting Nest application... [Nest] 22727 - 10/30/2021, 10:11:10 AM LOG [InstanceLoader] AppModule dependencies initialized +43ms [Nest] 22727 - 10/30/2021, 10:11:10 AM LOG [InstanceLoader] TypeOrmModule dependencies initialized +0ms [Nest] 22727 - 10/30/2021, 10:11:10 AM LOG [InstanceLoader] ConfigHostModule dependencies initialized +7ms [Nest] 22727 - 10/30/2021, 10:11:10 AM LOG [InstanceLoader] ConfigModule dependencies initialized +1ms [Nest] 22727 - 10/30/2021, 10:11:10 AM LOG [InstanceLoader] ConfigModule dependencies initialized +1ms [Nest] 22727 - 10/30/2021, 10:11:11 AM LOG [InstanceLoader] GraphQLSchemaBuilderModule dependencies initialized +21ms [Nest] 22727 - 10/30/2021, 10:11:11 AM LOG [InstanceLoader] GraphQLModule dependencies initialized +1ms [Nest] 22727 - 10/30/2021, 10:11:11 AM LOG [InstanceLoader] TypeOrmCoreModule dependencies initialized +93ms [Nest] 22727 - 10/30/2021, 10:11:11 AM LOG [InstanceLoader] TypeOrmModule dependencies initialized +0ms [Nest] 22727 - 10/30/2021, 10:11:11 AM LOG [InstanceLoader] PostModule dependencies initialized +0ms /workspace/node_modules/graphql/type/schema.js:35 throw new Error( ^ Error: Expected undefined to be a GraphQL schema. at assertSchema (/workspace/node_modules/graphql/type/schema.js:35:11) at validateSchema (/workspace/node_modules/graphql/type/validate.js:34:28) at graphqlImpl (/workspace/node_modules/graphql/graphql.js:52:64) at /workspace/node_modules/graphql/graphql.js:21:43 at new Promise (<anonymous>) at graphql (/workspace/node_modules/graphql/graphql.js:21:10) at GraphQLSchemaFactory.create (/workspace/node_modules/@nestjs/graphql/dist/schema-builder/graphql-schema.factory.js:48:60) at GraphQLSchemaBuilder.buildSchema (/workspace/node_modules/@nestjs/graphql/dist/graphql-schema.builder.js:62:52) at GraphQLSchemaBuilder.build (/workspace/node_modules/@nestjs/graphql/dist/graphql-schema.builder.js:24:31) at GraphQLFactory.mergeOptions (/workspace/node_modules/@nestjs/graphql/dist/graphql.factory.js:33:69)No entiendo este error, ya que solo estoy siguiendo la documentación ...
// app.module.ts import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { GraphQLModule } from '@nestjs/graphql'; import { TypeOrmModule } from '@nestjs/typeorm'; import { GraphqlOptions } from './config/graphql.config'; import { typeOrmConfigAsync } from './config/typeorm.config'; import { PostModule } from './post/post.module'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), TypeOrmModule.forRootAsync(typeOrmConfigAsync), GraphQLModule.forRootAsync({ useClass: GraphqlOptions, }), PostModule, ], }) export class AppModule {} // graphql.config.ts import { Injectable } from '@nestjs/common'; import { GqlModuleOptions, GqlOptionsFactory } from '@nestjs/graphql'; @Injectable() export class GraphqlOptions implements GqlOptionsFactory { createGqlOptions(): Promise<GqlModuleOptions> | GqlModuleOptions { return { autoSchemaFile: 'schema.gql', sortSchema: true, debug: true, installSubscriptionHandlers: true, context: ({ req }) => ({ req }), }; } } // post.module.ts import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Post } from './post.entity'; import { PostResolver } from './post.resolver'; import { PostService } from './post.service'; @Module({ imports: [TypeOrmModule.forFeature([Post])], providers: [PostService, PostResolver], exports: [PostService], }) export class PostModule {} // post.entity.ts import { Field, ID, ObjectType } from '@nestjs/graphql'; import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity('post') @ObjectType() export class Post { @Field(() => ID) @PrimaryGeneratedColumn('uuid') id: string; @Field() @Column({ nullable: false }) title: string; @Field() @Column({ nullable: false, unique: true }) slug: string; @Field() @Column({ nullable: false }) content: string; @Field() @Column({ type: 'timestamp' }) createdAt: Date; @Field() @Column({ type: 'timestamp', nullable: true }) updatedAt: Date; }¿Alguien puede resaltar lo que está mal con mi proyecto?
Estaba recibiendo los mismos errores. Después de depurar paso a paso, la respuesta es que @nestjs/graphql@9.1.1 no es compatible con GraphQL@16 .
Específicamente, GraphQL@16 cambió la función gqaphql , como se llama desde dentro de graphqlImpl , para que solo admita argumentos sin un esquema:
function graphql(argsOrSchema, source, rootValue, contextValue, variableValues, operationName, fieldResolver, typeResolver) { var _arguments = arguments; /* eslint-enable no-redeclare */ // Always return a Promise for a consistent API. return new Promise(function (resolve) { return resolve( // Extract arguments from object args if provided. _arguments.length === 1 ? graphqlImpl(argsOrSchema) : graphqlImpl({ schema: argsOrSchema, source: source, rootValue: rootValue, contextValue: contextValue, variableValues: variableValues, operationName: operationName, fieldResolver: fieldResolver, typeResolver: typeResolver })); }); } Para resolverlo, deberá cambiar su versión de graphql a 15.x.
Necesita degradar graphql a 15.x :
npm install graphql@15.8.0Si no te importa la versión específica :
npm install graphql@15Si usas "hilo" :
yarn add graphql@15.8.0Si no te importa la versión específica :
yarn add graphql@15Como supe por la documentación oficial de nestjs. Es un problema de versión.
Para evitar este problema simplemente instale
npm i @nestjs/graphql graphql@^15 apollo-server-expresspara una mejor comprensión, consulte la documentación de nestjs