해결된 질문
작성
·
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되어 반환해 올 데이터의 값이 비어있을 경우 등 여러 오류 사항이 존재합니다. 이를 확인해 보시고 오류를 해결해 보시길 바랍니다. 감사합니다.
감사합니다! 선생님 ㅠㅠ 해결했습니다. 디버깅을 해보면서 터미널에서는 찍히는데, 왜 도대체 플레이그라운드에서는 안찍히는 걸까 한참을 쳐다봤는데,
product.entity.ts는 다시 복구 시켜놓겠습니다. 감사합니다.