Firebase 函数在每个请求中获取 10 个项目,通过 url 发送参数

问题描述 投票:0回答:1

目前我正在开发一个项目,我想将数据从 firebase 获取到 ESP32,由于 RAM 限制,我想一次处理 10 个 JSON 对象。我有以下 javascript 函数来请求数据:

exports.getData = functions.https.onRequest((request, response) => {
  const path = request.query.path;
  const limit = parseInt(request.query.limit, 10) || 10; 
  const startAtValue = request.query.startAt; 

  if (!path) {
    return response.status(400).send("Path query parameter is required");
  }

  const ref = admin.database().ref(path);

  let query = ref;
  if (startAtValue) {
    query = query.startAt(startAtValue);
  }
  query = query.limitToFirst(limit);

  query
    .once("value", (snapshot) => {
      const data = snapshot.val();
      response.send(data);

    })
    .catch((error) => {
      console.error("Error fetching data:", error);
      response.status(500).send(error);
    });
});

当我发出第一个请求时它就起作用了:

https://[REGION]-[PROJECT_ID].cloudfunctions.net/getData?path=/path/to/data&limit=11

我得到这样的数据

{
  "77303837": "77303837,12,-16,0",
  "77303868": "77303868,12,-16,0",
  "77303929": "77303929,12,-16,0",
  "77304889": "77304889,14,-16,0",
  "77304971": "77304971,12,-16,0",
  "77305435": "77305435,14,-16,0",
  "4072700001089": "4072700001089,0,0,0",
  "4792128005888": "4792128005888,0,0,0",
  "5410228202929": "5410228202929,2,0,0",
  "5410228217732": "5410228217732,0,0,0",
  "5410228243564": "5410228243564,1,0,0"
}

但是当我执行第二个操作时它失败了,例如:

https://[REGION]-[PROJECT_ID].cloudfunctions.net/getData?path=/path/to/data&limit=10&startAt=5410228243564

如有任何帮助,我们将不胜感激

我不是 JavaScript 专家,但根据 Firebase 文档,这应该可行。

javascript firebase-realtime-database google-cloud-functions
1个回答
0
投票

Firebase 实时数据库中的查询包括:

  1. 对您查询每个节点下固定路径处的值的路径的直接子节点进行order的指令。这可以通过以下方法完成:
    orderByChild
    orderByKey
    orderByValue
  2. 然后根据这些值过滤节点的指令。这是通过
    startAt
    endAt
    equalTo
    等方法完成的
  3. 使用
    limitToFirst
    limitToLast
    限制结果节点数量的指令。

您的代码缺少

orderBy
指令,这可能就是它不起作用的原因。由于您似乎想按路径下每个节点的值进行排序,因此请调用
orderByValue
:

let query = ref.orderByValue();
© www.soinside.com 2019 - 2024. All rights reserved.