javascript - 如何通过 graphQL 和 AWS AppSync 发送 JSON 数组以将数据添加到 Dynamo 表?

标签 javascript amazon-dynamodb aws-appsync

我正在尝试做的是通过 AppSync 从 React Native 应用程序发送数据,以便我可以更新 dynamo 表上的用户数据。我可以执行我所有的 CRUD 操作,只是不能执行数据列表。当我尝试时,我收到一条错误消息,提示我发送的不是有效的 JSON。但是,当我将输入通过 JSON linter 时,我的输入会作为有效的 JSON 传递。

为了尝试解决这个问题,我已将输入流程更改为最简单的流程。最初我是从本地缓存的已解析 JSON 字符串中提取我的 JSON。我认为 JSON.parse(obj) 函数可能存在问题。这不符合道理。因此,我将所有输入从 JS 对象移出并移入 JSON,该 JSON 事先未存储在变量中,而是直接传递到我正在使用的 API (https://aws-amplify.github.io/docs/js/api)。

在这不起作用之后,我认为我的 GraphQL 架构对于我发送的对象类型来说可能是错误的,但没有发现任何问题。

我在 AppSync 中使用 GraphQL 的模式定义如下:

input CreateUserInput {
  email: String!
  data: AWSJSON
}

我发送的请求如下:

const dbReturn = await API.graphql(graphqlOperation(
  mutations.createUser, {
    input: {
      "email": "fake.email@atdot.com",
      "data": [{
        "num": 34,
      }]
    }
  }
));

错误信息是这样的:

"Variable 'data' has an invalid value. Unable to parse [{num=34}] as valid JSON."

令我困惑的是 "[{num=34}]" 不是我给它的输入。我正在发送它 [{"num": 34}]" 这是有效的 JSON。我希望它能够解析我的输入并将数据发送到我的 dynamo 表,因为 JSON 输入是有效的。

有人知道我可以做些什么来克服这个问题吗?感谢您的帮助!

最佳答案

想通了。答案在于 GraphQL 模式。

"createUser": {
    "email": "Hello, world!",
    "data": "{\"key\":\"value\"}",
}

“复杂数据类型”的输入只是一个字符串。因此,在发出请求时,您只需将数据作为 JSON.stringify(variable.data) 之类的内容传递。我希望这对一路走来的人有所帮助。

关于javascript - 如何通过 graphQL 和 AWS AppSync 发送 JSON 数组以将数据添加到 Dynamo 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57204857/

相关文章:

php - 如何从 php onclick 语句获取值

ios - 将数据从 AWS DynamoDB 表加载到 iOS 上的 UITableView

java - 亚马逊网络服务 Java 类路径

react-native - 从 GraphQL 查询中选择随机 N 条记录

aws-lambda - 无服务器框架 Lambda AppSync 错误

javascript - jQuery datetimepicker 输入文本在选择时间时显示日期 31/12/1899

javascript - Valums Ajax 文件上传处理起来。文件?

javascript - 在 Javascript 中访问 Ruby 变量

java - 带有 DynamoDB 和 MySQL 双数据源的 Spring Data/JPA 存储库

graphql - 如何从 AWS Amplify 生成的 GraphQL 文档获取createdAt、updatedAt 和owner 字段?