繁体   English   中英

使用来自 API 的过滤器推送和拉取 JSON 数据

[英]Pushing and pulling JSON data with a filter from API

我正在研究一个 REACT JS 项目,试图创建一个小型待办事项列表应用程序。

我的数据在 JSON 文件中,目前托管在 jsonbin.io 上,格式如下所示......

{
  "moduleAccess": {
    "tasks": [
      {
        "email": "campbell@yahoo.com",
        "id": 0,
        "task_name": "Call mom",
        "due_date": 44875,
        "completed": true
      },
      {
        "email": "palsner593@gmail.com",
        "id": 1,
        "task_name": "Buy eggs",
        "due_date": 44880,
        "completed": false
      },
      {
        "email": "rob@gmail.com",
        "id": 2,
        "task_name": "Go to dog park",
        "due_date": 44879,
        "completed": false
      }
    ]
  }
}

目前,我使用 jsonbin.io 的 API 获取数据。数据被放入一个名为Tasks的变量中。 如果用户更新特定的待办事项、删除待办事项或创建新的待办事项,所有这些更改都会放回Tasks变量中。 然后我可以将这些任务推送到服务器。

我上面解释的很好; 然而,需要注意的是,我想允许多个用户登录,然后只提取属于他们各自 email 的 Todo 项目。

例如, campbell@yahoo.com已登录到我的应用程序。 在这种情况下,在我的获取拉取请求中,我可以指定我只想要campbell@yahoo.com的记录

 async function loadData() {
    const newPath = '$..tasks[?(@.email==' + campbell@yahoo.com + ')]';
    console.log(newPath);
    const url = 'https://api.jsonbin.io/v3/b/*binid*?meta=false'
    const response = await
      fetch(url, {
        method: "GET",
        headers: {
          "X-Master-Key": key,
          "X-JSON-Path": newPath
        }
      });
    const data = await response.json();
    setTasks([...data]);  //or whatever
    console.log(tasks);
  }

这个概念也有效。 但是,在用户进行更改后将我的任务数据推送回服务器时,我遇到了一个问题。 我正在使用的 API 似乎不允许在 PUSH 时指定 JSON 路径的参数。 JSON-PATH 仅允许用于拉取请求。 所以当我向服务器推送数据时,似乎所有 JSON 数据都会被覆盖,无论用户如何。

有人有其他方法来推送/拉取用户特定的数据吗? 如果我提供的细节是不必要的,我很抱歉。 不确定解决此问题的最简单方法是反应应用程序。

任何帮助表示赞赏。 谢谢!

我对 jsonbin.io API 做了一些研究,并提出了一个可能有效的解决方案。

所以我不确定这是否有效,但仍然有效。

创建新垃圾桶时,您可以使用X-Collection-Id将其添加到某个集合中。 所以你可以进行下一个流程:

  1. 用户注册时,为该用户创建一个单独的任务箱
  2. 将具有 bin id 的用户添加到某些用户集合中,您将在其中拥有所有用户
  3. 当用户授权时,使用您在代码中使用的过滤器获取他的 bin id,并将其存储以备将来在您的应用程序中的某个地方使用。
  4. 在此之后,您将能够通过该 bin id 获取用户任务并对其进行修改,因为现在它将成为每个用户的单独 bin,您可以简单地覆盖其所有内容。

希望这有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM