【问题标题】:Can't Remove Data because of Child Reference Error?由于子引用错误而无法删除数据?
【发布时间】:2019-03-31 10:36:57
【问题描述】:

我有一个用户结构,我可以在其中创建和更新用户,但由于某种字符串导致引用子错误,我无法删除用户。

基本上,我有一个实时数据库,其中包含不同的用户 ID,然后是姓名、年龄和国籍。

我希望能够尝试通过用户 ID 删除用户,例如 (usr5),这样当我输入该用户时,它就会从数据库中删除该用户。

谁能帮忙?

错误:

Reference.child failed: First argument was an invalid path = "[object HTMLInputElement]". Paths must be non-empty strings and can't contain ".", "#", "$", "[", or "]"
at fi (validation.ts:382)
at o.child (Reference.ts:90)
at removeUser ((fie path folders) index.html:115:58)

我的 HTML:

<body>

    <div>
        <h4>Create User: </h4>

            <form>
                <label>Create User ID: </label><input type="text" id="usrID"/><br/>
                <label>First Name: </label><input type="text" id="usrFName"/><br/>
                <label>Age: </label><input type="number" id="usrAge"/><br/>
                <label>Nationality: </label>
                    <select id="usrNation">
                        <option value="American">American</option>
                        <option value="British">British</option>
                        <option value="French">French</option>
                    </select>
                <button id="createUserBtn">Create</button>              
            </form>
    </div>

    <div>
        <h4>Remove User: </h4>

            <form>
                <label>Create User ID: </label><input type="text" id="usrID"/><br/>
                <button id="removeUserBtn">Remove</button>              
            </form>
    </div>

我的 Firebase/Javascript:

<script>

var database = new Firebase("https://(my db url)/"),

    userdb = database.child("/users");

    userID = document.getElementById('usrID'),
    userFirstName = document.getElementById('usrFName'),
    userAge = document.getElementById('usrAge'),
    userNationality = document.getElementById('usrNation');


function createUser(userID, usrFName, usrAge, usrNation){
    firebase.database().ref('users/' + userID).set({
        usrFName: usrFName,
        usrAge: usrAge,
        usrNation: usrNation            
    });

    console.log('Success');
}

function insertAutoKey(usrFName, usrAge, usrNation){

    var newPost = {
        usrFName: usrFName,
        usrAge: usrAge,
        usrNation: usrNation
    };

    var newPostKey = firebase.database().ref().child('users').push().key;

    var updates = {};
    updates['/users/' + newPostKey] = newPost;
    return firebase.database().ref().update(updates);
}

document.getElementById('createUserBtn').addEventListener('click', function(){

    var usrID = userID.value,
        usrFName = userFirstName.value,
        usrAge = userAge.value,
        usrNation = userNationality.value;

    if(usrID && usrFName && usrAge && usrNation) {
        createUser(usrID, usrFName, usrAge, usrNation);
    }       
});

function removeUser(){
    var userRef = firebase.database().ref().child("users").child(userID);

    userRef.once('value', function(snapshot) {

        if (snapshot.val() === null) {
            alert("no user found");
        }else{
            userRef.remove();
        }
    });
    console.log('Remove Success');
}

document.getElementById('removeUserBtn').addEventListener('click', function(){
    removeUser();
});

【问题讨论】:

    标签: javascript html firebase firebase-realtime-database


    【解决方案1】:

    改变这个:

    userID          = document.getElementById('usrID'),
    userFirstName   = document.getElementById('usrFName'),
    userAge         = document.getElementById('usrAge'),
    userNationality = document.getElementById('usrNation');
    

    进入这个:

    userID          = document.getElementById('usrID').value;
    userFirstName   = document.getElementById('usrFName').value;
    userAge         = document.getElementById('usrAge').value;
    userNationality = document.getElementById('usrNation').value;
    

    您需要添加属性value 来检索每个元素的值。

    【讨论】:

    • 仍在检索相同的错误,但我已经在 createUserBtn 中定义了 value 属性
    • in createUserBtn document.getElementById('createUserBtn').addEventListener('click', function(){ var usrID = userID.value, usrFName = userFirstName.value, usrAge = userAge.value, usrNation = userNationality.value; if(usrID &amp;&amp; usrFName &amp;&amp; usrAge &amp;&amp; usrNation) { createUser(usrID, usrFName, usrAge, usrNation); } }); userID 这里是一个局部变量。
    • 如果createUser 正在工作,那么在添加value 之后,函数removeUser 也应该可以工作。因为现在根据错误,您在 child() 中获得了一个 html 元素
    • 它用于输入用户id 问题似乎出在删除而不是创建区域?
    • createUser 工作正常,但对 removeUser 不起作用
    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2017-10-12
    • 2023-03-31
    相关资源
    最近更新 更多