Node.js에서 Firestore에 Date 유형을 전달하면 오류가 발생합니다.

Firebase의 클라우드 데이터베이스Cloud Firestore는 Timestamp 형식으로 날짜/시간 저장을 지원하며, 날짜순으로 정렬할 수 있습니다.
    const db = firebase.firestore()
    const data = await db.collection('messages')
      .orderBy('date', 'asc')
      .limit(limit)
      .get()
      .then(querySnapshot => {
        return querySnapshot.docs.map(doc => doc.data())
      })

또한 startAt 또는 endBefore와 같은 특정 기간으로 구분할 수 있습니다.
    const db = firebase.firestore()
    const startDate = new Date(`2019/01/01 00:00:00`)
    const endDate = new Date(`2020/01/01 00:00:00`)
    const data = await db.collection('messages')
      .orderBy('date', 'asc')
      .startAt(startDate)
      .endBefore(endDate)
      .limit(limit)
      .get()
      .then(querySnapshot => {
        return querySnapshot.docs.map(doc => doc.data())
      })

그런데 위의 코드를 Node.js로 이동하면 오류가 발생합니다. 클라이언트 측에서 움직이는 분에는 문제 없습니다.

나는 Nuxt.js를 사용하고 있었고 mounted로 호출 할 때 문제가 없지만 asyncData 또는 fetch로 갑자기 오류가 발생했기 때문에 상당히 곤란했습니다.



이 custom Date object가 무엇인지 몰랐습니다만, 우선 startDate를 출력해 보면,

크롬
{
  startDate: Mon Apr 01 2019 00:00:00 GMT+0900 (日本標準時)
}

node.js
{
  startDate: 2019-03-31T15:00:00.000Z
}

표기가 다르다…

Firestore는 전자의 형태라면 올바르게 받습니다만, 후자라면 에러가 되는 것 같습니다.

유일한 구원은 둘 다에 대응하는 Timestamp 변환 도구가 Firebase 패키지에 포함되어 있다는 것입니다.
    const startDate = firebase.firestore.Timestamp.fromDate(new Date(`2019/01/01 00:00:00`))
    const endDate = firebase.firestore.Timestamp.fromDate(new Date(`2020/01/01 00:00:00`))

이것이라면 움직입니다.

위의 콘솔 표시에서는 3/31 15:00이 되어 있었습니다만, 이것은 타임 존의 변환시의 차이이므로, Timestamp로 변환하면 어느쪽이나 완전히 같은 시각으로서 다루어져 Firestore로부터 취해 오는 것만이라면 무엇 문제가 없습니다.

Node.js의 시각 형식에 대해 직접 문제시하는 기사를별로 보지 않았기 때문에, 어쨌든 한쪽에서만 에러를 돌려주는 Firestore의 구현이 이상한 것일지도 모릅니다만, 해결했으므로 깊게 생각하는 것은 멈추었습니다 했다.

좋은 웹페이지 즐겨찾기