Saltar al contenido

¿Firestore no admite objetos de JavaScript con prototipos personalizados?

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));

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *