TIL / adonisJS consume vs serialize

flobeeee·2022년 3월 10일
0

Today I Learned

목록 보기
23/35

model에서 value를 보낼 때, consume, serialize 옵션이 있다.
차이점이 있다고 해서 정리해봤다.

데이터 확인 1

@column({ columnName: 'is_true', serializeAs: 'isTrue',
    prepare: (value: boolean | string | null) => value === null? null : value === 'true' || value === true? true : false,
    consume: (value: boolean | null) => value === null ? null : value ? true : 'consume',
    serialize: (value: boolean | null) => value === null ? null : 'serialize' ,
  })
public isTrue: boolean

위 코드처럼 Model을 변경하고,
isTrue 에 false로 api 요청을 보내서 DB에 isTrue 컬럼에 저장했다.
그리고 저장된 값을 읽어서 response로 보냈다.

응답은 { "isTrue": "serialize"} 로 받았다.

serialize가 찍히는 걸로 봐서 serialize가 나중에 작동한다.

데이터 확인 2

@column({ columnName: 'is_true', serializeAs: 'isTrue',
    prepare: (value: boolean | string | null) => value === null? null : value === 'true' || value === true? true : false,
    consume: (value: boolean | null) => value === null ? null : value ? true : null,
    serialize: (value: boolean | null) => value === null ? null : 'serialize' ,
  })
  public isTrue: boolean

consume 리턴값을 조정해봤다. null 로 찍혀서. 최종응답으로 null이 들어왔다.

공식문서

  • serialize : A custom function to handle the column value serialization. For example: Serialize luxon date objects to a string.
    컬럼 값을 조정하는 사용자 함수있다. 예를 들어 객체를 스트링타입으로 변화시킨다.

  • consume : A custom function to transform the after fetching it from the database and before defining it on the model instance.
    데이터베이스에서 가져와서 모델인스턴스에서 정의하기 전에 변화시키는 사용자 함수이다.

adonisJS 공식문서

결론

consume가 적용된 후에 serialize가 적용된다.

profile
기록하는 백엔드 개발자

0개의 댓글