API 만들기
boards.resolver
@Query(() => [Board], { nullable: true }) : 이 보드는 그래프ql에서 배열을 나타내는 것
fetchBoards(): Board[] 이 보도는 타입스크립트에서 배열을 나타내게 하는것
Args({ name: 'contents', nullable: true }) contents: string, // 필수값이 아니게 하려면 이런식으로 nullable 을 true
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { BoardsService } from './boards.sevice';
import { Board } from './entities/board.entity';
@Resolver()
export class BoardsResolver {
constructor(private readonly boardsService: BoardsService) {}
@Query(() => [Board], { nullable: true })
fetchBoards(): Board[] {
return this.boardsService.findAll();
}
@Mutation(() => String)
createBoard(
@Args('writer') writer: string,
@Args('title') title: string,
@Args('contents') contents: string,
): string {
return this.boardsService.create(writer, title, contents);
}
}
이 배열들을 쓰기 위해서 미리 entity에
배열에 관한 내용을 정의해둠
@ObjectType()
@Field(() => Int)
@Field(() => String)
이 필드들을 따로 정의해줘야 그래프ql 를 실행해서 스키마를 만들어 줄 수 있음
기존에 적은
number: number; 이러한내용들은 타입스크립트에서 타입을 정해준것임
실행하면 나오는 스키마
기존의 코드에서 contents 를 ! 표가 제거 된것은 이것을 컨텐츠에 추가했기 때
@Args({ name: 'contents', nullable: true }) contents: string, // 필수값이 아니게 하려면 이런식으로 nullable 을 true
# ------------------------------------------------------
# THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY)
# ------------------------------------------------------
type Board {
number: Int!
writer: String!
title: String!
contents: String!
}
type Query {
fetchBoards: [Board!]
}
type Mutation {
createBoard(writer: String!, title: String!, contents: String): String!
}
entity
import { Field, Int, ObjectType } from '@nestjs/graphql';
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
@ObjectType()
export class Board {
@PrimaryGeneratedColumn('increment')
@Field(() => Int)
number: number;
@Column()
@Field(() => String)
writer: string;
@Column()
@Field(() => String)
title: string;
@Column()
@Field(() => String)
contents: string;
}
boards.sevice
기존에 string 으로 작성되어있는 findAll 을 배열 로 타입을 변경
배열은entity 에 정의해둔 대로 Board[] 로 바팁을 바꿈 : Board 를 임포트 해줘야 오류가 없어짐
import { Injectable } from '@nestjs/common';
import { Board } from './entities/board.entity';
@Injectable()
export class BoardsService {
findAll(): Board[] {
// 1. 데이터를 조회하는 로직 => DB에 접속해서 데이터 꺼내오기
const result = [
{
number: 1,
writer: '철수',
title: '제목입니다~~',
contents: '내용이에요@@@',
},
{
number: 2,
writer: '영희',
title: '영희 제목입니다~~',
contents: '영희 내용이에요@@@',
},
{
number: 3,
writer: '훈이',
title: '훈이 제목입니다~~',
contents: '훈이 내용이에요@@@',
},
];
// 2. 꺼내온 결과 응답 주기
return result;
}
create(writer: string, title: string, contents: string): string {
// 1. 브라우저에서 보내준 데이터 확인하기
console.log(writer);
console.log(title);
console.log(contents);
// 2. DB에 접속 후, 데이터를 저장 => 데이터 저장했다고 가정
// 3. DB에 저장된 결과를 브라우저에 응답(response) 주기
return '게시물 등록에 성공하였습니다!!';
}
}
boards.sevice -2
createBoardInput 에 타입을 지정
IBoardsServiceCreate
import { IBoardsServiceCreate } from './interfaces/boards-service.interface'; 로 타입을 인터페이스 폴더에서 따로 관리
import { Injectable } from '@nestjs/common';
import { Board } from './entities/board.entity';
import { IBoardsServiceCreate } from './interfaces/boards-service.interface';
@Injectable()
export class BoardsService {
findAll(): Board[] {
// 1. 데이터를 조회하는 로직 => DB에 접속해서 데이터 꺼내오기
const result = [
{
number: 1,
writer: '철수',
title: '제목입니다~~',
contents: '내용이에요@@@',
},
{
number: 2,
writer: '영희',
title: '영희 제목입니다~~',
contents: '영희 내용이에요@@@',
},
{
number: 3,
writer: '훈이',
title: '훈이 제목입니다~~',
contents: '훈이 내용이에요@@@',
},
];
// 2. 꺼내온 결과 응답 주기
return result;
}
create({ createBoardInput }: IBoardsServiceCreate): string {
// 1. 브라우저에서 보내준 데이터 확인하기
console.log(createBoardInput.writer);
console.log(createBoardInput.title);
console.log(createBoardInput.contents);
// 2. DB에 접속 후, 데이터를 저장 => 데이터 저장했다고 가정
// 3. DB에 저장된 결과를 브라우저에 응답(response) 주기
return '게시물 등록에 성공하였습니다!!';
}
}
interface
import { CreateBoardInput } from '../dto/create-board.input';
export interface IBoardsServiceCreate {
createBoardInput: CreateBoardInput;
}
최종적으로 작동 확인

'NEST.js' 카테고리의 다른 글
| NEST 소프트 딜리트 (0) | 2023.10.01 |
|---|---|
| NEST validation, 수정api (0) | 2023.10.01 |
| NEST Typescript 심화 타입 ( Utility, Generic) (0) | 2023.09.29 |
| NEST GraphQL (0) | 2023.09.29 |
| NEST API구조 (0) | 2023.09.29 |