Firebase Realtime Web 始终 Returns 符合 snapshot.exists()

Firebase Realtime Web Always Returns True to snapshot.exists()

我正在使用 Firebase 实时数据库创建一个简单的 URL 缩短器。我现在的目标是查看用户选择的别名并检查数据库以查看它是否已经存在。如果别名存在,则返回该函数并要求用户创建一个新别名。如果没有,则将数据添加到数据库中。

我 运行 遇到的问题是 snapshot.exists() 总是 returns true。即使别名不在数据库中。我查看了 this question 和其他几个问题,但它们都已超过两年,可能已经过时了。

我的代码如下所示:

const dbRef = ref(getDatabase());

function submitData() {
  var linkAlias = document.getElementById("alias").value;
  var linkInput = document.getElementById("text").value;
  var linkAuto = document.getElementById("auto").value;
  console.log(linkAlias)
  get(dbRef, `${linkAlias}`).then(function(snapshot) {
    console.log(linkAlias)
    if (snapshot.exists() == true) {
      console.log(snapshot.val());
      alert("This alias already exists!");
      return;
    } else {
      sendDataToDB(linkAlias, linkInput, linkAuto);
      alert("Success!")
    }
  });
}

我认为,在尝试解决这个问题数周之后,最好使用我的代码 认为 只是单个别名的快照的对象。相反,它是所有别名及其 URL 的字典。

例如,我可以定义我的快照值:

var codeData = snapshot.val();

然后我可以在字典键或值中搜索别名:

if (Object.keys(codeData).includes(linkAlias) === true) {
  ...

我将采用这个答案,因为没有其他方法对我有用。