【问题标题】:Axios requests ignoring parametersaxios请求忽略参数
【发布时间】:2020-01-17 19:18:48
【问题描述】:

我正在向 Firebase Realtime API 发送请求。当我尝试从特定集合(例如期刊)中删除项目并使用 axios.delete("https://topxxx-xxx.firebaseio.com/journals.json", {title: "Nature"}}) 指定哪个期刊标题时,集合中的所有期刊都是删除,不仅仅是“自然”。同样,如果我执行 get 请求并指定标题,则会返回所有期刊。

我也尝试过使用“https://topxxx-xxx.firebaseio.com/journals.json”,{params: {title: "Nature"}}。但这也会返回所有期刊。以下是删除请求示例:

    axios.delete("https://topxxx-xxx.firebaseio.com/journals.json", {title: this.state.title})
      .catch(error=> console.log("Error" + error))

【问题讨论】:

    标签: reactjs firebase firebase-realtime-database axios


    【解决方案1】:

    Firebase 实时数据库 API 不支持条件删除。要删除节点,您必须指定该节点的整个部分,并且(在 REST API 中)use the DELETE verb 或 use the X-HTTP-Method-Override: DELETE header。

    所以分两步流程:

    1. 执行查询以查找具有您要查找的标题的节点:

      https://topxxx-xxx.firebaseio.com/journals.json?orderBy="title"&equalTo="the title"
      
    2. 通过向以下 URL 发送 DELETE 来删除匹配节点:

      https://topxxx-xxx.firebaseio.com/journals/journalId1.json
      

    【讨论】:

    • 哦,我明白了。谢谢!那么我还是改用 Firestore 会更好吗?
    • Firestore 也不支持条件删除。在那里你也需要先查询找到所有文档,然后一个一个地删除它们。
    【解决方案2】:

    您不能像在 firebase 中那样从 json 文件中删除指定项目,并且使用 GET 也会返回整个集合。它在火力基地方面工作得非常正确。如果你想要一些你所期望的东西,可以选择一个小型烧瓶服务器或在 firebase 中检查云功能

    【讨论】:

      【解决方案3】:

      您可能希望将该请求发送到连接到 firebase 的后端服务(我假设您使用的是 axios)。然后调用remove方法演示here

      【讨论】:

      • 感谢您的回答,但我看到许多其他回复显示如何使用 axios.delete 而不是删除(例如stackoverflow.com/questions/52694011/…)。也许我在这里遗漏了一些重要的东西......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      相关资源
      最近更新 更多