如何将使用“new”运算符创建的对象保存到Firestore?

问题描述 投票:0回答:2

我有一个简单的打字稿通知类,我正在尝试实例化它并保存到 firestore

 let notification = new Notification(
    new User(followerDoc.username, followerDoc.photoUrl)
  );
  _usersRef
    .doc(uid)
    .collection("notifications")
    .add(notification)

哪个抛出

错误:参数“data”的值不是有效的 Firestore 文档。无法序列化“User”类型的对象(在“users.

0
”字段中找到)。 Firestore 不支持具有自定义原型的 JavaScript 对象(即通过“new”运算符创建的对象)。

我可以手动展开对象并保存它,如下所示:

  _usersRef
    .doc(uid)
    .collection("notifications")
    .add({
      isRead: notification.isRead,
      users: [{username: notification.users[0].username, photoUrl: notification.users[0].photoUrl}],
      notNamedCount: notification.notNamedCount,
      type: "followers",
    })

但这比我想做的还要多。有没有办法将使用“new”运算符创建的对象保存到 firestore?

javascript google-cloud-firestore
2个回答
2
投票

不,这是不可能的。 错误消息告诉您必须提供一个纯 JavaScript 对象,其键和值是您要在文档中创建的字段。 Firestore SDK 不接受自定义对象。 考虑在您的通知对象上创建一个方法,将其转换为普通对象,就像您期望使用 toJSON 方法的任何对象一样。


0
投票

我正在寻找类似问题的解决方案,并找到了一些快速而简单的解决方案。

技巧是将自定义 JavaScript 对象转换为 JSON 字符串并将其解析回常规 JavaScript 对象。您可以使用 JavaScript 标准的静态方法(内置 JSON 对象)通过以下代码简单地完成此操作:

JSON.parse(JSON.stringify(customObjectOfAnyClass))
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.