【问题标题】:Data is not added to existing node in database数据未添加到数据库中的现有节点
【发布时间】:2017-04-22 13:40:11
【问题描述】:

我一直在尝试将数据添加到我的数据库中,但没有任何运气。 在我的代码中,我在单击时创建了一个按钮,它会将数据添加到我的用户数据库中,但不会将其添加到用户,而只是将数据添加到外部,如下所示:

是不是因为你用了createUserWithEmailAndPassword()函数后无法添加数据?

谁能告诉我它是怎么做的?

btn.addEventListener("click", function()
{

    firebase.auth().onAuthStateChanged(function(user)
    { 
        if (user)
        {
            var massage = inputText.value;
            var ref = database.ref("Users");

            var data = {
                display: massage
            }
            ref.push(data);
        }
    });
});

【问题讨论】:

    标签: javascript firebase web firebase-realtime-database firebase-authentication


    【解决方案1】:

    每当您致电push()时,Firebase 都会生成一个新的唯一 ID。因此要将新数据添加到现有节点,您不应该调用 push。相反,您需要为该用户找到对现有节点的引用。

    最简单(也是迄今为止最常见)的方法是将用户数据存储在每个用户的 UID 下。

    Users
      kHD...NoS
        username: "bob"
    

    还请注意,没有理由将这种类型的onAuthStateChange 侦听器放在按钮单击处理程序中。只需从顶级 JavaScript 附加它,它就会在用户登录或他们的身份验证状态以任何其他方式发生变化时触发。

    或者,如果代码确实必须响应按钮单击而运行,则身份验证状态侦听器没有实际用途,您只需检查firebase.auth().currentUser

    btn.addEventListener("click", function()
    {
        if (firebase.auth().currentUser)
        {
            var message = inputText.value;
            var ref = database.ref("Users");
    
            var data = {
                display: massage
            }
            ref.child(firebase.auth().currentUser.uid).update(data);
        }
    }
    

    【讨论】:

    • 所以你说我首先需要在我的用户中创建“显示”并更新它。因为不能只向用户列表添加数据?
    • 不,不是那样的。但是每次你打电话给push(),你都在创造一个新的孩子。如果您想更新现有的孩子,请不要致电push()
    【解决方案2】:

    您的代码似乎正确如果您想在 Firebase 数据库中插入一个新条目(就像您的屏幕截图所示)。

    但是,如果你真的想注册一个新用户,那么你应该改用firebase.auth().createUserWithEmailAndPassword()

    最后,如果您真的想更新现有节点,请参阅上面的 Frank 回复;-)

    【讨论】:

      【解决方案3】:

      试试这个。您可以将更新更改为设置。在你的情况下,像

      demo.update("users/KIK...fuA","display","my message");

      //REVEALED METHOD TO ADD NODES WITH DATA TO REALTIME DATABASE
      //eg, demo.update('mynode','myKey','myValue')
      var demo = (function() {
        var pub = {};
        pub.update = function (node,key,value){
          var ref = firebase.database().ref('/');
          var obj = {};
          obj[key] = value;
          ref.child(node).update(obj)
          .then(function() {
            console.log('Update Ran Successfully');
          });       
        }
        //API
        return pub;
      }());
      

      【讨论】:

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