728x90
반응형

1. 문제

더보기

ERROR [WsExcepionsHandler] Chatting validation failed: nickname: 

Cast to Embedded failed for value "닉네임" (type string)

at path "nickname" because of "ObjectExpectedError"

오늘 2번이나 나를 괴롭게 했던 에러문구! (더보기 클릭)

몽구스 model 관련 에러였다.

 

2. 시도해본 것들

오늘은 채팅하면서 닉네임과 채팅내용을 가져오는 작업을 했다.

강의를 보면서 코드를 완성했다.

그런데 채팅메시지가 null로 들어가서

이것저것 손보다가 에러 문구를 봤다. 

 

[validation failed]

 

검색해보면서 model관련 에러인것을 알았고,

유효성 실패?? 대충 단어를 보고 어디에 문제가 있는지 떠올려야 했다.

메시지의 경우는 model에선 chat이라 쓰고, gateway에선 message라고 쓰는 등

중구난방으로 사용했길래 통일해서 해결완료.

 

닉네임 값도 저장하고 싶은데 계속 null이 뜨거나

다음과 같이 에러문구가 발생했다.

 

3. 해결과정

    await this.chattingModel.create({
      nickname: client.data.nickname,
      message,
    });

 위의 코드를 계속 수정해가며 테스트했다.

nickname : socketObj

nickname : socketObj.id 등 계속하다가

도저히 알수가 없어서

튜터님을 찾아가서 해결했다.

 

@Schema(options)
export class Chatting extends Document {


  // @Prop({
  //   type: {
  //     _id: { type: Types.ObjectId, required: false, ref: 'sockets' },
  //     id: { type: String },
  //     username: { type: String, required: false },
  //   },
  // })
  @Prop({ required: true })
  @IsString()
  @IsNotEmpty()
  nickname: string;
  // nickname: SocketModel;

  @Prop({
    required: false,
  })
  @IsNotEmpty()
  @IsString()
  message: string;
}

export const ChattingSchema = SchemaFactory.createForClass(Chatting);

 

주석으로 처리한 prop(속성)값을 강의에서 본대로 작성했는데

type쪽이 유형을 정해버려서 에러가 발생했다.

그전에도 required: true; 에서 문제가 발생했다.

테스트하는 과정이라 닉네임도 없고 id도 없다보니

없는 변수를 필수로 처리해서 에러가 발생한것이었다.

 

 

4. 알게 된 점

 

몽고디비, 몽구스 연결시도 10회를 채우기로 했다.

도대체 뭐가 문제인지 궁금했다. 상세메시지를 봐야 해결할 수 있지 않을까?

상세 에러문구

강의보고 따라 작성한 옵션이고, 나는 최신몽구스를 설치한 것 같은데

해당 옵션은 지원하지 않는다고 한다. 주석처리하니 문제가 해결되었다.

[validation failed] 이것은 몽구스 model관련 에러니까 prop(속성)을 자세히 살펴보자!

 

728x90
반응형

+ Recent posts