여러 패키지들을 설치해야한다. 아래 명령어로 패키지들을 설치하자.
Fastify
를 사용한다면, apollo-server-express
대신 apollo-server-fastify
를 설치해야한다.
npm i @nestjs/graphql graphql-tools graphql apollo-server-express
NestJS는 GraphQL 어플리케이션을 구축하는 두 가지 방법을 제공한다.
나는 Typescript만을 이용해서 코드를 작성하고 싶기 때문에 code first 방식을 이용할 것이다.
GraphQLModule
을 AppModule
에 추가해준다. forRoot
메소드는 객체 하나를 인자로 받는다. 이 옵션들은 Apollo Instance로 전달되기 때문에 Apollo Docs에서 어떤 옵션이 있는지 확인할 수 있다.
// src/app.module.ts
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
@Module({
imports: [
GraphQLModule.forRoot({}),
],
})
export class AppModule {}
아래처럼 autoSchemaFile
옵션에 자동으로 스키마가 생성될 위치를 넣어준다. 만약 true
로 넘겨준다면, 스키마 파일이 생성되지 않고 메모리에 바로바로(on the fly) 스키마가 생성된다.
GraphQLModule.forRoot({
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
}),
-------------------- or --------------------
GraphQLModule.forRoot({
autoSchemaFile: true,
}),
아래처럼 만들면 된다.
@Query()
데코레이터 안에 리턴하고자하는 타입을 리턴하는 함수
를 넣으면 된다.
returns => String
에서 returns
는 단순히 @Query(return => String)
가 문장(Query returns String)처럼 보이기 위해서 넣은 이름이며, 사용되진 않는다. 당연하겠지만, @Mutation
데코레이터도 있다.
import { Resolver, Query } from '@nestjs/graphql';
@Resolver()
export class Resolver {
@Query(returns => String)
hello() {
return 'Hello';
}
}