Cloud Firestore node.js无效使用类型“ object”作为Firestore参数

时间:2019-03-08 14:45:37

标签: node.js firebase google-cloud-firestore

我的问题是为什么我似乎无法将数据传递到Firestore数据库中。我在node.js上运行代码,试图解析来自Firebase Firestore数据库的数据,然后将信息返回给数据库。信息检索工作正常,但是在尝试将数据传递回数据库时,始终出现一条我无法逃脱的错误消息。

if(message.type = "0") {
  console.log(0)
  db.collection("outbox").doc("messageID").set({message: "test message"})
}

在尝试处理最后一行代码时,出现以下错误消息:

  

错误:参数“数据”不是有效的Firestore文档。无效地将类型“ object”用作Firestore参数。

我的数据库的结构为发件箱/消息ID /消息。 Message包含一个字符串值,我正在使用admin SDK,因此写问题不是问题。我将对象传递给Firebase时做错了,但我无法弄清楚。这是我第一次使用Cloud Firestore和node.js,但之前我已经使用HTML / JS完成了小型项目。

1 个答案:

答案 0 :(得分:2)

firestore检查值是否为数组的方式似乎是内部错误。

我遇到一个简单的问题

db.collection('Test').add({ foo: 'bar' })

哪个导致

Error: Value for argument "data" is not a valid Firestore document. Invalid use of type "object" as a Firestore argument

深入研究Firebase源代码后,我发现他们根据此测试检查对象是否为对象:

Object.getPrototypeOf(input) === Object.prototype

在某些环境中出于某些未知原因(在我的情况下:Node v10.15.3 CLI),这是错误的

作为解决方法,如果您临时需要进行此工作,则可以在以下文件中编辑节点模块源代码:node_modules/@google-cloud/firestore/build/src/serializer.js

将isPlainObject函数更改为:

function isPlainObject(input) {
    return util_1.isObject(input);
}