javascript Firebase实时数据库中的GeoFire查询不工作

e5nszbig  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(108)

我正在使用GeoFire在React Native应用程序的Firebase实时数据库中添加和检索位置数据。使用addDataToGeofire()函数成功添加数据,但当我尝试使用getDataFromGeofire()函数检索数据并使用geoFire.query查询数据时,收到以下错误消息:
"错误[错误:Firebase数据库(${JSCORE_VERSION})内部Assert失败:未知节点类型]警告[@firebase/database:消防基地警告:使用未指定的索引。将在客户端下载并筛选您的数据。请考虑添加."indexOn":"g"添加到安全规则以获得更好的性能。错误[TypeError:t. split不是函数。(在"t. split("/")"中,"t. split"未定义)]错误[错误:Firebase数据库(${JSCORE_VERSION})内部Assert失败:未知节点类型]警告[@firebase/database:消防基地警告:使用未指定的索引。将在客户端下载并筛选您的数据。请考虑添加."indexOn":"g"安全规则以获得更好的性能]"
geoFire.get()函数工作正常,返回特定键的位置数据,但是geoFire.query()函数根本不工作,我检查了Firebase Realtime Database中的数据结构,使用geoFire.set()添加数据后,结果如下:
{"-NP4heZ1yLXk96HiScqH ":{".优先级":"u2mw1ze54y","g":"u2mw1ze54y"、"l":[40.502686、19.0655181 ]}}
我不确定是什么原因导致geoFire.query()函数出错。有人能帮我解决这个问题吗?下面是我的代码:

    • 防火墙助手. tsx**:
public async addDataToGeofire(){
  const geoFire = await new GeoFire(this.firebaseRef);

  const requestId = "-NP4heZ1yLXk96HiScqH";
  const latitude = 40.502686;
  const longitude = 19.0655181;

  await geoFire.set(requestId, [latitude, longitude])
    .then(() => {
      console.log(`Coordinates successfully added to the key: ${requestId}`);
    })
    .catch((error) => {
      console.error(`An error occurred while adding the coordinate" ${error}`);
    });
}

public async getDataFromGeofire(){
  const geoFire = await new GeoFire(this.firebaseRef);

  await geoFire.get("-NP4heZ1yLXk96HiScqH").then(function(location) {
    if (location === null) {
      console.log("Provided key is not in GeoFire");
    }
    else {
      console.log("Provided key has a location of " + location);
    }
  }, function(error) {
    console.log("Error: " + error);
  });

  const geoQuery = geoFire.query({
    center: [40.502686, 19.0655181],
    radius: 100
  });

  const onReadyRegistration = geoQuery.on("ready", () => {
    console.log("GeoQuery has loaded and fired all other events for initial data");
  });
}
    • 应用程序. tsx:**
constructor(){
  this.someMethod();    
}

async someMethod(){
  await databaseHelper.addDataToGeofire().then(async () => {await databaseHelper.getDataFromGeofire()});
}

整个输出:
已成功将LOG坐标添加到项:- NP4heZ1yLXk96HiScqH日志提供的项的位置为40.502686,19.0655181错误[错误:Firebase数据库(${JSCORE_VERSION})内部Assert失败:未知节点类型]警告[2023 - 02 - 26T19:54:41.545Z ]@firebase/数据库:消防基地警告:使用未指定的索引。将在客户端下载并筛选您的数据。请考虑添加."indexOn":"g"添加到安全规则以获得更好的性能。错误[TypeError:t. split不是函数。(在"t. split("/")"中,"t. split"未定义)]错误[错误:Firebase数据库(${JSCORE_VERSION})内部Assert失败:未知节点类型]警告[2023 - 02 - 26T19:54:41.698Z ]@firebase/数据库:消防基地警告:使用未指定的索引。将在客户端下载并筛选您的数据。请考虑添加."indexOn":"g"到您的安全规则以获得更好的性能。
先谢谢你

llycmphe

llycmphe1#

正如错误所述,您正在查询数据库规则中没有定义索引的路径上的数据。
如果您真的将数据直接存储在根目录下(这很少见,但并非不可能),则索引将为:

{
  "rules": {
    ...,
    ".indexOn": "g"
  }
}

相关问题