Ошибка: данные аргумента не являются допустимым документом. Входные данные - это не простой объект JavaScript

Я получаю сообщение об ошибке

Ошибка: аргумент «данные» не является допустимым документом. Ввод - это не простой объект JavaScript.

при обновлении документа с помощью административного SDK firebase. Вот код машинописного текста.

var myDoc = new MyDoc();
myDoc.Public.Name = "Jonh Doe" //setup up content

admin.firestore()
     .collection('MyDocs')
     .doc("Id1")
     .set(myDoc);

person MiguelSlv    schedule 08.02.2018    source источник


Ответы (4)


Я сделал нечто подобное:

var myDoc = <MyDoc> {
    Public: {
        Name: "Jonh Doe"
    }
}

Это семантически то же самое, я просто думаю, что это немного чище.

person Chad Bingham    schedule 19.02.2018

Если кто-то еще столкнется с той же проблемой, решение состоит в простом использовании Json для создания экземпляра объекта, например:

var myDoc = {
        Public: {
            Name: "Jonh Doe"
        }
    } as MyDoc; //keep type to still get typescript compiler validations
person MiguelSlv    schedule 08.02.2018

У меня была такая же проблема, в моем случае я забыл добавить Content-Type:application/json в свой заголовок при отправке запроса, а затем объект был обработан как строка, и я получил эту ошибку.

person Reza    schedule 10.03.2018

Вы можете воссоздать объект js с помощью; {...__data}

return refDB.set({...__data}).then((newData) => {

})
person Murat Çimen    schedule 29.10.2019
comment
У меня не сработало :( - person Akash Kundu; 31.12.2020
comment
Можно конкретнее? То, что вы получаете?. Это современный подход, возможно, вашей версии nodejs недостаточно. - person Murat Çimen; 04.01.2021
comment
Честно говоря, я использовал js вместо ts, что могло быть так. Однако я закончил использовать update () вместо этого this.firestore.collection('influencers').doc(influencerDoc.id).update(data) - person Akash Kundu; 04.01.2021
comment
Основная проблема для этой ошибки, недавно созданный объект имеет некоторый прототип, который является скрытым элементом массива, который будет проверяться из библиотеки firebase или api. Если вы создали новый объект и передали данные, проблема частично решена. Но я не стал углубляться. Так что точного ответа у меня нет. - person Murat Çimen; 05.01.2021