#javascript #html #firebase #firebase-realtime-database
#javascript #HTML #firebase #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