해결된 질문
작성
·
165
0
entity.ts파일에서 input으로 사용할 틀을 resolver에서 Mutation쪽 service의 매개변수로 넘겨줄려고 사용했는데
이러한 오류가 나서 찾아보니 해당 타입으로는 변수타입을
지정할수없어서 변경하라고했는데
class틀도 문제가 없는데 왜 오류가 나는지 잘모르겠습니다.
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { StarbucksService } from './starbucks.service';
import { InputStarbucks } from './entities/starbucks.input';
import { Starbucks } from './entities/starbucks.entity';
@Resolver()
export class StarbucksResolver {
constructor(
private readonly starbucksService: StarbucksService, // prettier때문에 아래로 내려쓰기가 안되니까 주석달기
) {}
@Query(() => [Starbucks], { nullable: true })
// graphql에서는 배열을 [Board]식으로 사용 아래에서는 Board[]라고 사용했는데
fetchBoards(): Starbucks[] {
return this.starbucksService.findAll();
}
@Mutation(() => String)
creatBoard(
// 한번에 사용하는 방식
@Args('inputStarbucks') inputStarbucks: InputStarbucks,
// graphql에서 데이터를 입력받고 변수명과 타입을 지정
// graphql에서 writer로 입력받은값을 writer라는 변수에 받고 데이터 타입은 string으로 지정
): string {
return this.starbucksService.create({ inputStarbucks });
// return을 작성해야 사용한 api쪽 리턴이 module쪽까지 전달됨
}
}
import { Injectable, Scope } from '@nestjs/common';
import { Starbucks } from './entities/starbucks.entity';
import { InputStarbucks } from './entities/starbucks.input';
@Injectable({ scope: Scope.DEFAULT })
export class StarbucksService {
findAll(): Starbucks[] {
// entity에서 만든 Board의 배열형태를 가져와서 사용
const result = [
{ number: 1, writer: '짱구', title: '제목', contents: '내용이요' },
{ number: 2, writer: '짱구2', title: '제목2', contents: '내용이요2' },
{ number: 3, writer: '짱구3', title: '제목3', contents: '내용이요3' },
];
return result;
}
create({ inputStarbucks }: InputStarbucks): string {
console.log(inputStarbucks.writer); // 데이터 타입의 클래스의 명과 동일해야한다 .writer이부분이
console.log(inputStarbucks.title);
console.log(inputStarbucks.contents);
return '게시물 등록 성공';
}
}
import { Field, InputType } from '@nestjs/graphql';
// @ObjectType() // 이렇게 작성하면 type으로 나옴 . 리턴타입이 type이었을때
// mutation의 경우에는 input으로 작성했다
@InputType()
export class InputStarbucks {
@Field(() => String)
writer: string;
@Field(() => String)
title: string;
@Field(() => String)
contents: string;
}
// Graphql에서 사용하기위해서 graphql 데이터 타입지정
답변 1
0
안녕하세요! Daon님!
해당 스크린샷의 2번째 화면을 보니, { inputStarbucks }: InputStarbucks 로 타입을 지정하셨네요!
create({ inputStarbucks }: InputStarbucks): string {
console.log(inputStarbucks.writer); // 데이터 타입의 클래스의 명과 동일해야한다 .writer이부분이
console.log(inputStarbucks.title);
console.log(inputStarbucks.contents);
return '게시물 등록 성공';
}
inputStarbucks의 타입이 InputStarbucks이므로,
inputStarbucks: InputStarbucks 와 같이 지정되어야합니다.(중괄호가 빠져야겠죠?!)
만약, 중괄호를 추가하고 싶으시다면,
{ inputStarbucks }: { inputStarbucks: InputStarbucks } 와 같이 지정되어야해요!
쉽게 이야기하면, ":"을 기준으로 왼쪽과 오른쪽의 구조가 동일해야합니다!