Не удается удалить данные из-за ошибки дочерней ссылки?

#javascript #html #firebase #firebase-realtime-database

#javascript #HTML #firebase #firebase-база данных в реальном времени

Вопрос:

У меня есть структура пользователя, в которой я могу создавать и обновлять пользователя, но я не могу удалить пользователя из-за ошибки дочерней ссылки из-за какой-то строки.

В принципе, у меня есть база данных реального времени, состоящая из разных идентификаторов пользователей, затем есть имя, возраст и национальность.

Ошибка HTML

Пользователи Firebase

Я хочу иметь возможность попытаться удалить пользователя, например, по его идентификатору пользователя (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 amp;amp; usrFName amp;amp; usrAge amp;amp; 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();
});
  

Ответ №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 , чтобы получить значение каждого элемента.

Комментарии:

1. Все еще повторяется та же ошибка, но я уже определил свойство value внутри createUserBtn

2.в 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 здесь находится локальная переменная.

3. Если createUser работает, то после добавления value функция removeUser также должна работать. Поскольку теперь, согласно ошибке, вы получаете html-элемент в child()

4. Он используется для ввода идентификатора пользователя, проблема, похоже, в удалении, а не в области создания?

5. CreateUser работает нормально, но не работает с removeUser