해결된 질문
작성
·
255
0
안녕하세요~
복습중 이상한 현상이 발생하여 질문드립니다~
답변 주시면 감사하겠습니다~
질문1.resolver 부분에서
boards() 부분의 주석 부분을 해제해야,
맨아래 3번 오류가 발생하지 않고, 정상 작동 합니다.
Query 없이 Mutation 만작성하면 오류가 발생하는걸까요? 아래 코드와 같이 query 부분을 주석 처리 하면 왜 오류가 나는 걸까요?
질문2.
에러가 내가 작성한 파일의 어떤부분이 잘못됐다고,
알려주는건 없는 걸까요?
아래 에러 코드를 보면 내가 작성한 코드가 아닌
작성하지도 않은 설치 파일같은데서 error 정보가 나오는데, 저기를 열어봐야 할까요?
GraphQLError: Query root type must be provided.
at SchemaValidationContext.reportError (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\type\validate.js:73:7)
1.resolver
import { Args, Mutation, Resolver } from '@nestjs/graphql';
import { BoardsService } from './boards.service';
import { CreateBoardInput } from './dto/create-board.input';
import { Board } from './entities/board.entity';
@Resolver()
export class BoardsResolver {
constructor(private readonly boardsService: BoardsService) {}
// @Query(() => String)
// boards(): string {
// return this.boardsService.boards();
// }
@Mutation(() => Board)
createBoard(
@Args('createBoardInput') createBoardInput: CreateBoardInput, //
): Promise<Board> {
return this.boardsService.create({ createBoardInput });
}
}
2.service
import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { IBoardsServiceCreate } from './interfaces/boards-service.interface';
import { Board } from './entities/board.entity';
@Injectable()
export class BoardsService {
constructor(
@InjectRepository(Board)
private readonly boardsRepository: Repository<Board>, //
) {}
// boards() {
// return 'boards';
// }
create({ createBoardInput }: IBoardsServiceCreate): Promise<Board> {
return this.boardsRepository.save({ ...createBoardInput });
}
}
3.error
[
GraphQLError: Query root type must be provided.
at SchemaValidationContext.reportError (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\type\validate.js:73:7)
at validateRootTypes (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\type\validate.js:89:13)
at validateSchema (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\type\validate.js:41:3)
at graphqlImpl (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\graphql.js:60:63)
at C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\graphql.js:23:43
at new Promise (<anonymous>)
at graphql (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\graphql.js:23:10)
at GraphQLSchemaFactory.create (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\schema-builder\graphql-schema.factory.js:50:65)
at GraphQLSchemaBuilder.generateSchema (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql-schema.builder.js:35:52)
at GraphQLSchemaBuilder.build (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql-schema.builder.js:22:31) {
path: undefined,
locations: undefined,
extensions: [Object: null prototype] {}
}
]
C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\schema-builder\graphql-schema.factory.js:56
throw new schema_generation_error_1.SchemaGenerationError(errors);
^
Error: Schema generation error (code-first approach)
at GraphQLSchemaFactory.create (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\schema-builder\graphql-schema.factory.js:56:23)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at GraphQLSchemaBuilder.generateSchema (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql-schema.builder.js:35:24)
at GraphQLSchemaBuilder.build (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql-schema.builder.js:22:20)
at GraphQLFactory.generateSchema (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql.factory.js:27:41)
at GraphQLModule.onModuleInit (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql.module.js:109:27)
at callModuleInitHook (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\core\hooks\on-module-init.hook.js:51:9)
at NestApplication.callInitHook (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\core\nest-application-context.js:223:13)
at NestApplication.init (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\core\nest-application.js:100:9)
at NestApplication.listen (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\core\nest-application.js:169:33)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
질문1에 대한 답변입니다. GraphQL 스키마는 기본적으로 ‘Query’ 타입을 필요로 합니다. 이는 GraphQL API를 사용할 때 데이터를 조회하는 기본적인 방법이기 때문입니다. Mutation으로 데이터를 변경하는 것도 중요하지만, 쿼리를 통해 데이터를 읽는 기능이 없으면 완성도 높은 API를 구축하기 어렵습니다. 따라서 Query 타입이 없으면 ‘Query root type must be provided’ 오류가 발생합니다. Query 부분을 주석 처리하게 되면, 해당 Query 타입이 정의되지 않았기 때문에 오류가 발생하는 것입니다.
질문2에 대한 답변입니다. GraphQL 서버 구현 시 발생하는 오류 메시지는 종종 해당 설정 파일이나 구현된 라이브러리 내부에서 발생하는 경우가 있습니다. 이는 개발자가 작성한 스키마 정의나 리졸버, 서비스와 같은 환경 설정에 의존하기 때문입니다. 따라서 이러한 오류 메시지는 내부 구현을 직접적으로 가리키지 않고, 스키마 검증 과정에서 문제가 일어났음을 알려주는 것입니다. 이 경우, 스키마나 리졸버의 구현부에서 발생하는 문제를 확인해야 할 필요가 있습니다. 보통은 GraphQL 스키마를 정의하는 과정에서 필요한 Query 또는 Mutation, Type 등을 누락하거나 잘못 정의했을 때 이러한 오류 메시지가 출력됩니다.
GraphQLError: Query root type must be provided.
오류를 해결하기 위해서는 최소한 하나의 Query 필드를 스키마에 정의해야 합니다. 이미 주석 처리된 @Query(() => String)
부분을 해제하셔서 Query를 정의하시면 문제가 해결될 것입니다.