-
2019-09-16 개발일지개발일지 2019. 9. 16. 17:42
오늘은 이슈들을 수정했다.
이슈 리스트
- 각종 게시판의 상세보기 및 댓글 보기에서 시간 포맷에 AM / PM이 표현되지 않음
- 글을 등록하거나 댓글을 등록하면 등록 시간이 아닌 백엔드 서버가 실행된 시간으로 고정되어 들어감
①
현재 나는 프로젝트의 데이트 포맷을 컨트롤하기 위해 dateformat 패키지를 사용하고 있다.
소개: https://www.npmjs.com/package/dateformat
dateformat(Date.now(), 'yyyy.mm.dd hh:MM:ss TT')
이런 형식으로 뒤에 TT를 붙이면 AM / PM 구분이 추가된다.
②
조금 이상하다 생각했는데 결국 내가 잘못 알고 있는 지식 때문에 발생한 문제였다.
테이블 모델에서 글 생성일, 수정일, 삭제일을 시퀄라이즈에게 전가하지 않고 직접 컨트롤하고 있다.
생성일의 경우 Not NULL 옵션이 활성화되어 있어서 defaultValue를 설정해주었다.
Something.init({ ... create: { type: Sequelize.DATE, allowNull: false, defaultValue: Date.now() } }, { sequelize, modelName: 'something', timestamps: false })
Date 객체의 now() 메소드를 사용하여 매번 create이 발생할 때 마다 현재 시간을 박아넣을거라 생각했다.
근데 이건 내 착각이었다.
모델링 객체인 Something은 서비스(서버)가 실행될 때에 최초 메모리에 할당이 되는데, 이 때 defaultValue가 정의가 된다.
그런데 defaultValue instanceof Date인게 아니라...
defaultValue = (Date.now()에 의해 리턴된) 2019-09-16 18:30:120 값이 되는 것이다.
따라서 위의 코드는 사실상 다음과 같다.
Something.init({ ... create: { type: Sequelize.DATE, allowNull: false, defaultValue: '2019-09-16 18:30:120' } }, { sequelize, modelName: 'something', timestamps: false })
다행히 등록되는 시간이 서비스가 실행된 시간이었기 때문에 빨리 문제를 파악할 수 있었지, 만약 그걸 몰랐다면 꽤 삽질을 했을 것 같다.
해결은 create가 발생할 때 마다 Date.now()를 호출하도록 수정했다.
'개발일지' 카테고리의 다른 글
2019-09-18 개발일지 (0) 2019.09.18 2019-09-17 개발일지 (0) 2019.09.17 2019-09-11 개발일지 (0) 2019.09.11 2019-09-10 개발일지 (0) 2019.09.10 2019-09-09 개발일지 (0) 2019.09.09