ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2019-09-16 개발일지
    개발일지 2019. 9. 16. 17:42

    오늘은 이슈들을 수정했다.

     

    이슈 리스트

    1. 각종 게시판의 상세보기 및 댓글 보기에서 시간 포맷에 AM / PM이 표현되지 않음
    2. 글을 등록하거나 댓글을 등록하면 등록 시간이 아닌 백엔드 서버가 실행된 시간으로 고정되어 들어감

     

    현재 나는 프로젝트의 데이트 포맷을 컨트롤하기 위해 dateformat 패키지를 사용하고 있다.

    소개: https://www.npmjs.com/package/dateformat

     

    dateformat

    A node.js package for Steven Levithan's excellent dateFormat() function.

    www.npmjs.com

     

    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
Designed by Tistory.