Javascript Axios-参数-在引号中传递参数值时出现问题;参数值“;

Javascript Axios-参数-在引号中传递参数值时出现问题;参数值“;,javascript,firebase-realtime-database,axios,Javascript,Firebase Realtime Database,Axios,我一直在处理对firebase实时数据库Rest端点的axios get请求 通过使用三个参数(见下文)和以下生成的最终url,postman抓取工作正常: 随后,我创建了以下简单的axios请求。对于“startAt”和“endAt”,我收到错误“Constraint key field必须是有效的key name”,因为约束似乎没有用引号翻译。对于“orderBy”参数,我收到“orderBy必须是有效的JSON编码路径”。因为“$key”在结束url中也没有引号 我尝试了多种传递参数的方

我一直在处理对firebase实时数据库Rest端点的axios get请求

通过使用三个参数(见下文)和以下生成的最终url,postman抓取工作正常:

随后,我创建了以下简单的axios请求。对于“startAt”和“endAt”,我收到错误“Constraint key field必须是有效的key name”,因为约束似乎没有用引号翻译。对于“orderBy”参数,我收到“orderBy必须是有效的JSON编码路径”。因为“$key”在结束url中也没有引号

我尝试了多种传递参数的方法,但没有一种有效。如前所述,邮递员一切正常

感谢您的帮助


       axios({
                method: 'GET',
                url:'https://projectname.firebaseio.com/latestMeasurements.json,
                params: { startAt: "key000010", endAt: "key000020", orderBy : "$key" },
            })
                .then((res) => {
                    console.log("SUCCESSFUL FETCH", res.data);
                })
                .catch((e) => {
                    console.log("ERROR",e);
               
                });
/latestmeasures下的示例数据:

[{
    "key000001": {
        "city": "Stockholm",
        "country": "SE",
        "lastUpdated": 1522854000000,
        "latitued": "N/A",
        "location": "(Folkungagatan tillfälligt avstängd)",
        "longitued": "N/A",
        "measurements": [
            {
                "parameter": "no2",
                "unit": "µg/m³",
                "value": -99
            },
            {
                "parameter": "pm10",
                "unit": "µg/m³",
                "value": -99
            }
        ]
    },
    "key000002": {
        "city": "Ulaanbaatar",
        "country": "MN",
        "lastUpdated": 1552513500000,
        "latitude": 47.91798,
        "location": "1-r khoroolol",
        "longitude": 106.84806,
        "measurements": [
            {
                "parameter": "co",
                "unit": "µg/m³",
                "value": 57
            },
            {
                "parameter": "no2",
                "unit": "µg/m³",
                "value": 30
            },
            {
                "parameter": "pm10",
                "unit": "µg/m³",
                "value": 199
            },
            {
                "parameter": "pm25",
                "unit": "µg/m³",
                "value": 217
            },
            {
                "parameter": "so2",
                "unit": "µg/m³",
                "value": 21
            }
        ]
    }
}
]
获取前端时出错(此处orderBy在url中是固定的,不会作为参数传递,从而仅对其他参数产生错误):

在postman中复制此错误(参数值不在引号中):

邮递员成功(引号中的参数值):


我无法重现这个问题,因为我在这里得到了预期的结果:

我认为您正在努力解决Firebase实时数据库键始终是字符串这一事实,而您正试图将它们视为顺序数字(数组)索引。Firebase专家强烈建议不要使用这样的数组索引,例如在以下经典博文中:

如果必须使用此类索引,则需要确保以字典排序顺序与数字排序顺序相同的格式存储它们。我通常建议:

  • 使用简短的字母数字前缀作为每个数字键的前缀,以防止Firebase将这些键视为数组
  • 将数字值填充到固定长度,使键的字典顺序和数字顺序相同
  • 组合后,您的JSON将变成:

    { 
      "key001": {
        "city" : "天津市",
        ...
      },
      "key002": {
        "city" : "Stockholm",
        ...
      }
    }
    
    然后您的查询变成:

    params: { startAt: 'key001', endAt: 'key010', orderBy : "$key" }
    

    我无法重现这个问题,因为我在这里得到了预期的结果:

    我认为您正在努力解决Firebase实时数据库键始终是字符串这一事实,而您正试图将它们视为顺序数字(数组)索引。Firebase专家强烈建议不要使用这样的数组索引,例如在以下经典博文中:

    如果必须使用此类索引,则需要确保以字典排序顺序与数字排序顺序相同的格式存储它们。我通常建议:

  • 使用简短的字母数字前缀作为每个数字键的前缀,以防止Firebase将这些键视为数组
  • 将数字值填充到固定长度,使键的字典顺序和数字顺序相同
  • 组合后,您的JSON将变成:

    { 
      "key001": {
        "city" : "天津市",
        ...
      },
      "key002": {
        "city" : "Stockholm",
        ...
      }
    }
    
    然后您的查询变成:

    params: { startAt: 'key001', endAt: 'key010', orderBy : "$key" }
    
    我认为不太优雅的解决方案是将param值放在双引号中,但我想肯定有更复杂的方法


    我认为不太优雅的解决方案是将参数值放在双引号中,但我想肯定还有更复杂的问题。

    您能否编辑您的问题,在您正在查询的
    最新度量值中显示JSON(以文本形式,请不要截图)。您可以通过单击溢出菜单中的“导出JSON”链接来实现这一点(⠇) 在你的上。事实上,Postman有一个惊人的功能,允许你将请求转换为代码。它可以为Axios生成完全相同的请求代码,这样你就不会有这种问题。我知道这个工具,但据我所知,它将请求转换为静态url,而不需要参数输入……这里需要知道的是,我需要星号因此,分页的tAt和endAt参数需要是动态的。CI可以使用您的条件和数据进行查询,而不会显示错误消息:这些结果中有什么问题?您是否可以编辑您的问题以在您正在查询的
    latestmeasures
    处显示JSON(文本形式,请不要截图)。您可以通过单击溢出菜单中的“导出JSON”链接(⠇) 在你的上。事实上,Postman有一个惊人的功能,允许你将请求转换为代码。它可以为Axios生成完全相同的请求代码,这样你就不会有这种问题。我知道这个工具,但据我所知,它将请求转换为静态url,而不需要参数输入……这里需要知道的是,我需要星号用于分页的tAt和endAt参数,因此需要是动态的。CI可以查询您的条件和数据,而不会出现错误消息:这些结果中有什么问题?我重新格式化了数据。使用postman,它再次工作得很好,尽管我必须添加“key”,即startAt:“key000001“。考虑到axios请求,问题仍然存在,请参阅屏幕截图中更新的问题。不过这次错误有所不同。但是当我直接插入没有参数的邮递员url时(参数在引号中)抓取效果很好。我在《邮递员》中重现了这个问题,如果我不把这些值放在引号中,问题就简单了。请参见编辑问题中的屏幕截图二。我重新格式化了数据。使用《邮递员》,它再次发挥了很好的效果,尽管我必须添加“键”,即startAt:“key000001”。考虑到axios请求,问题仍然存在,请参阅更新后的问题和屏幕截图。不过这次的错误不同。但是,当我直接插入没有参数的邮递员url时(参数在引号中)抓取效果很好。我在《邮递员》中重现了这个问题,如果我不把这些值加引号的话,问题就简单了。请参见编辑问题中的截图二。