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

LI님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

N:M 등록 / 조회 API

N:M 등록 / 조회 API

해결된 질문

작성

·

555

·

수정됨

0

 query{
  fetchProduct(productId:"7967c808-532f-48e8-87b7-4f4536ab1903"){
    id
    name
    description
    price
    isSoldout
    productSaleslocation{
      id
      address
      addressDetail
      lat
      lng
      meetingTime
    }
    productCategory{
      id
      name
    }
    productTags{
      id
      name
    }
  }
}

 

 

{
  "errors": [
    {
      "message": "Cannot return null for non-nullable field Query.fetchProduct.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "fetchProduct"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "stacktrace": [
            "Error: Cannot return null for non-nullable field Query.fetchProduct.",
            "    at completeValue (C:\\Users\\enter\\OneDrive\\바탕 화면\\agarang-camp\\19-01-typeorm-crud-many-to-many\\node_modules\\graphql\\execution\\execute.js:594:13)",
            "    at C:\\Users\\enter\\OneDrive\\바탕 화면\\agarang-camp\\19-01-typeorm-crud-many-to-many\\node_modules\\graphql\\execution\\execute.js:486:9",
            "    at processTicksAndRejections (node:internal/process/task_queues:96:5)",
            "    at async Promise.all (index 0)",
            "    at execute (C:\\Users\\enter\\OneDrive\\바탕 화면\\agarang-camp\\19-01-typeorm-crud-many-to-many\\node_modules\\apollo-server-core\\src\\requestPipeline.ts:501:14)",
            "    at processGraphQLRequest (C:\\Users\\enter\\OneDrive\\바탕 화면\\agarang-camp\\19-01-typeorm-crud-many-to-many\\node_modules\\apollo-server-core\\src\\requestPipeline.ts:407:22)",
            "    at processHTTPRequest (C:\\Users\\enter\\OneDrive\\바탕 화면\\agarang-camp\\19-01-typeorm-crud-many-to-many\\node_modules\\apollo-server-core\\src\\runHttpQuery.ts:436:24)"
          ]
        }
      }
    }
  ],
  "data": null
}

 

똑같이 따라헀는데, fetchproduct 부분에서 왜 이런 오류가 발생하는 것일까요?

 product.entity.ts 를 아래와 같이 nullable: true로 수정했는데도 플레이 그라운드에서 똑같은 에러가 나옵니다.
========================

 

 

 

 

import { Field, Int, ObjectType } from '@nestjs/graphql';
/* eslint-disable prettier/prettier */
// product.entity.ts

import { ProductCategory } from 'src/apis/productCategory/entities/productCategory.entity';
import { ProductSaleslocation } from 'src/apis/productsSaleslocation/entities/productSaleslocation.entity';
import { ProductTag } from 'src/apis/productTags/entities/productTag.entity';
import { User } from 'src/apis/users/entities/user.entity';
import {
  Column,
  DeleteDateColumn,
  Entity,
  JoinColumn,
  JoinTable,
  ManyToMany,
  ManyToOne,
  OneToOne,
  PrimaryGeneratedColumn,
} from 'typeorm';

@Entity()
@ObjectType()
export class Product {
  @PrimaryGeneratedColumn('uuid')
  @Field(() => String)
  id: string;

  @Column()
  @Field(() => String)
  name: string;

  @Column()
  @Field(() => String)
  description: string;

  @Column()
  @Field(() => Int)
  price: number;

  @Column({ default: false }) //시작시 디폴트값
  @Field(() => Boolean)
  isSoldout: boolean;
  // soldedAt: Date

  // @Column({ default: false }) //시작시 디폴트값
  // @Field(() => Boolean)
  // isDeleted: boolean;

  // @Column({ default: null }) //시작시 디폴트값
  // @Field(() => Date)
  // DeletedAt: Date;

  @DeleteDateColumn()
  @Field({ nullable: true })
  deletedAt: Date;

  @JoinColumn()
  @OneToOne(() => ProductSaleslocation)
  @Field(() => ProductSaleslocation)
  productSaleslocation: ProductSaleslocation;

  @ManyToOne(() => ProductCategory)
  @Field(() => ProductCategory)
  productCategory: ProductCategory;

  @ManyToOne(() => User)
  @Field(() => User, { nullable: true })
  user: User;

  @JoinTable()
  @ManyToMany(() => ProductTag, (productTags) => productTags.products)
  @Field(() => [ProductTag])
  productTags: ProductTag[];
}

/*tag가 배열이다 
그래프QL에서 배열은 양쪽으로 감싸는 게 배열이다.  */

 위 product.enttity.ts를 수정한 이유는

DB에 deletedAt 컬럼이 null, userId 컬럼이 null로 되어 있어서 아래와 같이 추가해주었습니다. 그래도 똑같은 에러가 발생하네요.

 @Field({ nullable: true })
  deletedAt: Date;

  @ManyToOne(() => User)
  @Field(() => User, { nullable: true })
  user: User;

답변 1

0

안녕하세요. LI님

단순히 코드에서 return을 작성하지 않아 데이터를 반환받을 수 없을 경우이거나, join되어 반환해 올 데이터의 값이 비어있을 경우 등 여러 오류 사항이 존재합니다. 이를 확인해 보시고 오류를 해결해 보시길 바랍니다. 감사합니다.

LI님의 프로필 이미지
LI
질문자

감사합니다! 선생님 ㅠㅠ 해결했습니다. 디버깅을 해보면서 터미널에서는 찍히는데, 왜 도대체 플레이그라운드에서는 안찍히는 걸까 한참을 쳐다봤는데,

product.entity.ts는 다시 복구 시켜놓겠습니다. 감사합니다.

LI님의 프로필 이미지

작성한 질문수

질문하기