【问题标题】:Error: Argument "data" is not a valid Document. Input is not a plain JavaScript object错误:参数“数据”不是有效的文档。输入不是纯 JavaScript 对象
【发布时间】:2018-07-19 08:21:33
【问题描述】:

我收到了错误

错误:参数“数据”不是有效的文档。输入不是普通的 JavaScript 对象。

更新文档时,使用 firebase admin SDK。这里是 Typescript 代码。

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

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

【问题讨论】:

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


    【解决方案1】:

    如果其他人遇到同样的问题,解决方案是简单地使用 Json 来实例化对象,如下所示:

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

    【讨论】:

      【解决方案2】:

      我做了类似的事情:

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

      它在语义上是相同的,我只是觉得它更干净一些。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,在我的情况下,我在发送请求时忘记将Content-Type:application/json 添加到我的标题中,然后对象被视为字符串,我得到了那个错误。

        【讨论】:

          【解决方案4】:

          您可以通过以下方式重新创建 js 对象; {...__data}

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

          【讨论】:

          • 你能说得更具体点吗?你得到什么?。这是现代方法,可能你的nodejs版本不够。
          • 公平地说,我使用的是js而不是ts,可能是这样。但是,我最终使用 update() 代替了 this.firestore.collection('influencers').doc(influencerDoc.id).update(data)
          • 这个错误的主要问题,新创建的对象有一些原型,这是数组的隐藏元素,将从 firebase 库或 api 进行验证。如果您创建了新对象并传递数据,则问题部分解决了。但我没有深入。所以我没有确切的答案。
          猜你喜欢
          • 2018-11-25
          • 2021-06-02
          • 1970-01-01
          • 1970-01-01
          • 2011-02-02
          • 1970-01-01
          • 2023-01-31
          • 1970-01-01
          • 2014-12-26
          相关资源
          最近更新 更多