【问题标题】:firebase realtime database calling set with new properties具有新属性的firebase实时数据库调用集
【发布时间】:2019-02-26 21:52:05
【问题描述】:

我在我的 ionic 应用程序中使用 firebase 实时数据库并使用 angularfire2。我的数据存储如下:

"users" : {
    "230A3lKQqWh0TczOGP8sbtMVpuF2" : {
      "email" : "xxx@gmail.com",
      "isAdmin" : false,
      "name" : "Santosh Yadav",
      "pic" : "https://graph.facebook.com/xxx/picture"
    },
    "oSEYj0zrkhPCk9r7uwyOOkHcqe53" : {
      "email" : "yyy@gmail.com",
      "isAdmin" : true,
      "name" : "Vik Kumar",
      "pic" : "https://graph.facebook.com/xxx/picture"
    },
    "tl3uvseaBeWVYFCTwSngUqcSokX2" : {
      "email" : "zzz@gmail.com",
      "isAdmin" : false,
      "name" : "Neeti Singhal",
      "pic" : "https://graph.facebook.com/xxx/picture"
    }
}

我们最终存储了更多的用户数据,例如出生日期和周年纪念日,当我们尝试如下更新时:

createUser(user:User){
    console.log('start of create user')
    var payload = {
      "name": user.name,
      "email": user.email,
      "pic" : user.pic,
      "dob" : user.dob,
      "anivDate" : user.anivDate,
    }

    return this.db.object('/users/' + user.uid).set(payload).then(
      (resp) => console.log("user created")
    ).catch(
      (err) => console.log("issues creating user:" + err)
    )
  }

失败并出现错误:

ERROR Error: Reference.set failed: First argument contains undefined in property 'users.oSEYj0zrkhPCk9r7uwyOOkHcqe53.anivDate'
    at validateFirebaseData (validation.js:113)
    at validation.js:140
    at forEach (obj.js:46)

我了解无法设置我的 firebase 实时数据库中不存在的属性 anivDate 的错误。如果我手动将属性手动添加到数据库中,这将解决。但这不是一个实际的解决方法。那么,这里的解决方案是什么?

要定义修复:如果不存在,我希望添加一个新属性,否则只需更新它。

【问题讨论】:

  • 不确定我是否理解。错误消息表明user.anivDate 不存在(这就是undefined 的含义)。这是您预期会发生的情况吗?

标签: firebase firebase-realtime-database angularfire2


【解决方案1】:

为了快速解决问题,请使用 || 运算符为 undefined 元素设置默认值。用法:

var payload = {
  "anivDate": user.anivDate || "1970-01-01",
  ...
};

这会将anivDate 设置为user.anivDate(如果存在),1970-01-01(如果不存在)。 (这可行,但在我看来,如果不存在这样的值,最好不要在用户上拥有 anivDate 属性,并在访问数据时检查该值是否存在。)

要获得更可扩展/更可靠的修复,请使用 Firebase's realtime database triggers 将异步验证或默认值添加到新列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多