Luego de tanto luchar ya dimos con el resultado de esta preocupación que muchos usuarios de este sitio han presentado. Si tienes algún detalle que aportar puedes aportar tu comentario.
Solución:
El cliente Firestore Node.js no admite la serialización de clases personalizadas.
Encontrarás más explicaciones en este número:
https://github.com/googleapis/nodejs-firestore/issues/143
“Decidimos explícitamente no admitir la serialización de clases personalizadas para el cliente Web y Node.JS”
Una solución es convertir el objeto anidado en un objeto plano. Por ejemplo, usando lodash o JSON.stringify.
firestore.collection('collectionName')
.doc('id')
.set(JSON.parse(JSON.stringify(myCustomObject)));
Aquí hay una publicación relacionada:
Firestore: Agregar objeto personalizado a db
Otra forma es consumir menos recursos:
firestore
.collection('collectionName')
.doc('id')
.set(Object.assign(, myCustomObject));
Nota: solo funciona para objetos sin objetos anidados.
También puedes usar class-transformer
y es classToPlain()
junto con exposeUnsetFields
opción de omitir undefined
valores.
npm install class-transformer
or
yarn add class-transformer
import classToPlain from 'class-transformer';
firestore
.collection('collectionName')
.doc('id')
.set(classToPlain(myCustomObject, exposeUnsetFields: false));