JavaScript/Firebase:如何在Firebase实时数据库存储URL ?



我只是想在我的firebase实时数据库中存储一些数据,但是当这样做时,我一直得到这个错误:

Paths must be non-empty strings and can't contain ".", "#", "$", "[", or "]"

问题不在于我想要存储的数据,而在于我想要给出的路径名称。我希望路径名是URL。但它显然包含了那些"非法的"。符号。

这是我尝试命名路径和存储一些数据的方式:

// URL example: 
var newNote = firebase
.database()
.ref()
.child("/https://developer.mozilla.org/en
US/docs/Learn/JavaScript/First_steps/Strings") // <-- this is the problem
.set({
title: title,
icon: icon,
body: body,
url: url,
});

对于如何解决这个问题有什么想法吗?

您需要对URL进行编码,使其不再包含任何非法字符。由于还将URL存储在节点中,因此可以对密钥进行单向编码。例如,您可以从字符串中删除所有非法字符。假设您不希望数据库解释键中的/,您也可以删除它们,并最终得到:

.child("/httpsdevelopermozillaorgen USdocsLearnJavaScriptFirst_stepsStrings")

现在,每当您再次在代码中获得URL时,您将应用相同的编码并以相同的键结束。

许多这样的编码模式,您应该选择最适合您的用例的。例如,您还可以将非法字符替换为其他内容,以产生更具可读性的密钥:

.child("/https___developer_mozilla_org_en US_docs_Learn_JavaScript_First_steps_Strings")

或者您可以完全放弃可读性,并使用URL的散列作为其键:

.child(hashCode("/https://developer.mozilla.org/en US/docs/Learn/JavaScript/First_steps/Strings"))

这将(与我链接的hashCode函数)最终存储在:

.child("-1097737053")