【问题标题】:Update and add new Firebase child nodes in Firebase web app at the same time同时在 Firebase Web 应用中更新和添加新的 Firebase 子节点
【发布时间】:2016-11-27 02:15:08
【问题描述】:

我已经能够推送新信息并在数据库中调用它,但我已经找了好几天了,但我似乎找不到任何东西。

我希望能够更新一个已经有值的节点,如果没有,则添加一个新节点。谁能帮我这个。 Firebase 新手。

谢谢

代码:

function userProfileUpdate(users) {

                newUsername = document.getElementById("newUsername");

                // Profile Update.
                var user = {
                username : newUsername.value
                };

                return firebase.database().ref().update(user);
            };

【问题讨论】:

  • 添加数据应该像ref.setValue({ name: "user3411711" })一样简单。听起来你已经尝试了一些东西。如果您分享minimal code that reproduces where you're stuck,会更容易提供帮助。
  • 是的,我尝试了几种方法。
  • 感谢您的更新。这段代码有什么问题?它运行吗?你在调试器中单步执行了吗? JavaScript 控制台是否有任何错误?
  • 现在它创建另一个节点而不是更新当前节点。如果我将其结构化为用户 -> uid 然后 -> 用户名,会不会是它没有指向正确的路径?

标签: node.js web-applications firebase firebase-realtime-database


【解决方案1】:

从您的 cmets 看来,您希望将用户信息存储在如下数据结构中:

users
    uid1
        userName: "Frank van Puffelen"

要在此结构中添加特定用户,您可以:

function userProfileUpdate(users) {
    var user = firebase.auth().currentUser;
    var root = firebase.database().ref();

    newUsername = document.getElementById("newUsername");

    var user = {
        username : newUsername.value
    };

    return root.child('users').child(user.uid).set(user);
};

更新

update a specific property of a specific user

Map<String, Object> updates = new HashMap<String,Object>();
updates.put("username", newUsername.value);
root.child('users').child(user.uid).updateChildren(user);

或者:

root.child('users').child(user.uid).child("username").setValue(newUsername.value);

如果位置不存在,两者都会自动创建。

【讨论】:

  • 是的,结构是正确的。我收到此错误:Firebase.child failed: First argument is an invalid path: "undefined" with your updated code。
  • 不知道这是否重要,但我的是用户名而不是用户名
  • user.uid 很可能在您的场景中未定义。请在调试器中单步执行代码并检查user 是否有值,如果有,它的user.uid 是什么。 Stack Overflow 是一种用于远程调试的糟糕机制。
  • 我认为我的代码总体上是错误的。我想使用未设置的更新。我已经存储了我只是想让它更新的用户名。但是对于尚不存在的项目,例如个人资料图片或电话号码,我希望它创建一个新的值/子节点。
  • 当你为它们设置一个值时会自动创建节点,所以你可以调用updateChildren()
【解决方案2】:

Frank 你的代码拿走了整个密钥,但我确实想通了

var user = firebase.auth().currentUser;
        var root = firebase.database().ref();

        newUsername = document.getElementById("newUsername");

        firebase.database().ref('users/' + user.uid).update({
            username: newUsername.value
          });

感谢弗兰克,你把我推向了正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多