강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

융융님의 프로필 이미지
융융

작성한 질문수

08. 퀴즈 fetchProduct 오류

작성

·

145

0

섹션08 퀴즈를 풀고 있는데 상품등록 버튼을 누르면 오류가 떠요.

try, catch 사용하면 오류 메세지가 떠서 확인해보니 apolloError가 뜨네요..

뭔가 잘못 입력한게 있는 것 같은데 어느 부분이 잘못되었는지 모르겠어요ㅠㅠ

 

폴더 경로

/section08/boards

import { useMutation, gql } from "@apollo/client";
import { useState } from "react";
import { useRouter } from "next/router";

const CREATE_PRODUCT = gql`
mutation createProduct($seller: String, $createProductInput: CreateProdutInput!){
    createProduct(seller: $seller, createProductInput: $createProductInput){
        _id
        number
        message
}}
`

export default function CreateProductQuizPage() {

    const router = useRouter()

    const [seller, setSeller] = useState();
    const [name, setName] = useState();
    const [detail, setDetail] = useState();
    const [price, setPrice] = useState();


    const [myProduct] = useMutation(CREATE_PRODUCT);

    const onClickSubmitProduct = async () => {

        try {
            const result = await myProduct({
                variables: {
                    seller: seller,
                    createProductInput: {
                        name: name,
                        detail: detail,
                        price: price
                    }
                }
            });
            console.log(result);
            router.push(`/section08/product/${result.data.createProduct.id}`)
        } catch (error) {
            alert(error.messege)
        }
    }

    const onChangeSeller = (event) => {
        setSeller(event.target.value)
    }

    const onChangeName = (event) => {
        setName(event.target.value)
    }

    const onChangeDetail = (event) => {
        setDetail(event.target.value)
    }

    const onChangePrice = (event) => {
        setPrice(event.target.value)
    }

    return (
        <div>
            <div>판매자 :
                <input type="text" onChange={onChangeSeller} />
            </div>
            <div>상품명 :
                <input type="text" onChange={onChangeName} />
            </div>
            <div>상품내용 :
                <input type="text" onChange={onChangeDetail} />
            </div>
            <div>상품가격 :
                <input type="text" onChange={onChangePrice} />
            </div>
            <button onClick={onClickSubmitProduct}>상품등록</button>
        </div>
    )
}

 

폴더 경로

/section08/product/[id]

import { useQuery, gql } from "@apollo/client";
import {useRouter} from "next/router"

const FETCH_PRODUCT = gql`
query fetchProduct($productId: ID){
    fetchProduct(productId: $productId){
        seller
        name
        detail
        price
    }
}
`

export default function CreateProductQuizIdPage(){

    const router = useRouter();

    const {data} = useQuery(FETCH_PRODUCT, {
        variables : {
            productId: router.query.id
        }
    });
    console.log(data)

    return(
        <div>
            <div>{router.query.id} 상세정보</div>
            <div>판매자 : {data?.fetchProduct?.seller}</div>
            <div>상품명 : {data?.fetchProduct?.name}</div>
            <div>상품내용 : {data?.fetchProduct?.detail}</div>
            <div>상품가격 : {data?.fetchProduct?.price}</div>
        </div>
    )
}

 

productId: router.query.id 는 수업 내용 보며 입력했는데 아직 왜 이렇게 작성 되어야는지 이해가 되지 못했습니다..

createProduct에서 등록된 아이디가 fetchProduct의 [id] (변수 id)가 되는게 맞나요? 너무 헷갈려서 다시 여쭤봅니다

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

지은님의 상품 등록 관련 문제를 살펴보았습니다. 특정 오류가 발생했을 때, 여러 가지 가능성을 확인해야 합니다. 지은님께서 제공해주신 스크린샷과 코드를 기반으로 몇 가지 점검 사항을 말씀드리겠습니다.

  1. CREATE_PRODUCT 뮤테이션 정의 부분에서 CreateProdutInput 오타가 있는 것 같습니다. 올바르게는 CreateProductInput이어야 합니다.
  2. ApolloError의 400 에러는 일반적으로 요청이 올바르지 않을 경우 발생합니다. 이는 입력값 형식이 잘못된 경우, 뮤테이션 요청 시 필요한 변수가 누락되었거나, 잘못된 값을 전송했을 때입니다.
  3. GraphQL 서버에 정의된 스키마에 대한 입력 타입과 뮤테이션 선언이 맞는지 확인 해보시기 바랍니다.
  4. CREATE_PRODUCT 뮤테이션 실행 결과에서 id 대신 _id를 사용해야 하는지 확인해 보세요. result.data.createProduct.id 부분이 올바른지 재검토하셔야 합니다.
  5. 첨부하신 스크린샷은 프론트엔드에서 서버로의 요청이 잘못되어 발생한 에러로 보입니다. 따라서 CREATE_PRODUCT 뮤테이션과 관련된 요청의 변수 부분을 다시 한 번 점검해 보세요.

이와 같은 내용들을 지은님의 코드에 반영하여 다시 시도해 보시기 바랍니다. 추가적으로 문제가 해결되지 않는다면, 사용 중인 GraphQL API의 설계 문서나 스키마를 참고하여 요청 형식이 올바른지 확인해보시는 것이 좋습니다.

에러 해결에 도움이 되었길 바랍니다. 다른 질문이 있으시면 언제든지 질문해 주세요.

융융님의 프로필 이미지
융융

작성한 질문수

질문하기