Node.js에서 Firestore에 Date 유형을 전달하면 오류가 발생합니다.
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의 구현이 이상한 것일지도 모릅니다만, 해결했으므로 깊게 생각하는 것은 멈추었습니다 했다.
Reference
이 문제에 관하여(Node.js에서 Firestore에 Date 유형을 전달하면 오류가 발생합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ykoizumi0903/items/a5d0bbbf9d9875edd429텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)