Firestore не поддерживает объекты JavaScript с пользовательскими прототипами? - PullRequest
0 голосов
/ 07 сентября 2018

Я использую узел Bigquery Package , чтобы запустить простое задание. Если посмотреть на результаты (скажем, data) задания, атрибут effective_date выглядит следующим образом:

 effective_date: BigQueryDate { value: '2015-10-02' }

, который, очевидно, является объектом в возвращенном data объекте.

При импорте возвращенного json в Firestore выдается следующая ошибка:

UnhandledPromiseRejectionWarning: Error: Argument "data" is not a 
valid Document. Couldn't serialize object of type "BigQueryDate". 
Firestore doesn't support JavaScript objects with custom prototypes 
(i.e. objects that were created via the 'new' operator).

Есть ли элегантный способ справиться с этим? Нужно ли перебирать результаты и конвертировать / удалять все объекты?

1 Ответ

0 голосов
/ 07 июля 2019

Клиент Firestore Node.js не поддерживает сериализацию пользовательских классов.

В этом выпуске вы найдете больше объяснений:
https://github.com/googleapis/nodejs-firestore/issues/143
«Мы явно решили не поддерживать сериализацию пользовательских классов для клиента Web и Node.JS»

Решением является преобразование вложенного объекта в простой объект. Например, используя lodash или JSON.stringify.

firestore.collection('collectionName')
    .doc('id')
    .set(JSON.parse(JSON.stringify(myCustomObject)));

Вот соответствующий пост:
Firestore: Добавить пользовательский объект в db

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...