Я полный новичок в мире баз данных. Я пытаюсь использовать базу данных Firebase, и вот проблема, с которой я сталкиваюсь: я хочу создать простую подписку, в которой пользователь должен писать информацию, и эта информация должна храниться в базе данных Realtime. То есть, когда пользователь вводит свою информацию и нажимает кнопку «зарегистрироваться», должен быть создан пользователь 1, затем пользователь 2 вводит свою информацию, и пользователь 2 должен быть создан, но все они должны быть «дочерними элементами» одного уровня. Казалось, все работает нормально, я создал объект (в Javascript), затем добавил в базу данных как «дочерний элемент» с именем «пользователь 1», но когда я обновил страницу и ввел другую информацию для пользователя 2, эта информация перезаписала пользователя 1, но когда я просто удаляю информацию о пользователе 1 из полей ввода в браузере (без обновления) и ввожу информацию о пользователе 2, он создает второго «потомка» с именем пользователя 2, как и должно было быть, и это то, что я хочу быть. Вопрос в том, почему обновление браузера перезаписывает предыдущую информацию. Вот мой код js:
function submitClick(x){
var firebaseRef = firebase.database().ref();
user_number ++;
firebaseRef.child("user" + " " + user_number).set(x);
}
function signup(){
var first_name = document.getElementById("first_name").value;
var last_name = document.getElementById("last_name").value;
var username = document.getElementById("user_name").value;
var password = document.getElementById("password").value;
var obj = {
First_Name: first_name,
Last_Name: last_name,
Username: username,
Password: password
}
return obj;
}
var hold;
var user_number = 0;
submit_btn.onclick = function() {hold = signup(); submitClick(hold)};
а html - это просто поля ввода и кнопка с именем «зарегистрироваться»



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Когда вы перезагружаете страницу, JavaScript перезагружается и снова выполняется с нуля. Он не помнит, что происходило до того, как вы его перезагрузили.
Это означает, что эта строка выполняется снова:
var user_number = 0;
Таким образом, user_number снова начинает отсчет от 0.
Самый простой способ решить эту проблему - использовать метод Firebase push():
function submitClick(x){
var firebaseRef = firebase.database().ref();
firebaseRef.push().set(x);
}
Это создает новый уникальный идентификатор в корневом каталоге, где он устанавливает пользователя. Хотя эти так называемые push-идентификаторы не так легко читаются, как ваши номера, они гарантированно будут уникальными для перезагрузок, нескольких пользователей и даже в автономных / онлайн-условиях.
Типа ... push() генерирует ссылку на новое уникальное местоположение. Чтобы узнать больше об этом, см. firebase.googleblog.com/2014/04/… и firebase.googleblog.com/2015/02/….
Большое спасибо. Это сработало. Еще один вопрос, пожалуйста. Можно ли сказать, что firebaseRef.push () создает своего рода экземпляр под корневым ref, а затем с помощью set (x) мы помещаем данные под этот экземпляр?