如何通过 AWS AppSync 客户端将保存字符串的变量传递给 GraphQL 查询?

Posted

技术标签:

【中文标题】如何通过 AWS AppSync 客户端将保存字符串的变量传递给 GraphQL 查询?【英文标题】:How to pass a variable holding a string to a GraphQL query via the AWS AppSync client? 【发布时间】:2019-08-06 11:44:33 【问题描述】:

我正在使用 React JS 应用程序通过 AWS AppSync 客户端和 GraphQL API 将数据提交到云中的 NoSQL 表。我使用 AWS Amplify 自动生成了 GraphQL 操作,现在我尝试在我的 React 代码中提交以下操作: (注意和公司只是 React 状态下的字符串值)

  createOffer(note, company) 
    const input = 
            place: company,
            title_de: note,
            category: "product",
        
    return API.graphql(graphqlOperation(mutations.createOffers, input: input
    ));

这会产生一个异常“[object Object]”

现在如果我像这样直接传递字符串

  createOffer() 
    const input = 
            place: "Example Company ",
            title_de: "Example Title",
            category: "product",
        
    return API.graphql(graphqlOperation(mutations.createOffers, input: input
    ));

它工作正常。 到目前为止,我发现的唯一解决方法是将保存字符串值的变量包装在 JSON.stringify(company) 和 JSON.stringify(note) 中。但随后相应的数据库条目用双引号“Example Company”而不是Example Company 括起来。

我希望避免手动修改自动生成的 GraphQL API 代码,因为我希望它会经常更改。

客户端是否有一个选项可以将实际字符串从 React 状态获取到 API 调用中,而不需要 GraphQL 将其识别为对象或在数据库中以双引号结尾?

【问题讨论】:

【参考方案1】:

您尝试过模板文字吗?

const input = 
  place: `$company`,
  title_de: `$note`,
  category: 'product'

当我在开发控制台中进行快速测试时,这肯定会删除您遇到的额外引号。

【讨论】:

确实,这成功了。我之前尝试过模板文字,但结果我的引号是错误的。非常感谢!

以上是关于如何通过 AWS AppSync 客户端将保存字符串的变量传递给 GraphQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

AWS AppSync:如何通过 DynamoDB 返回有效的 JSON

基于位置的 AWS AppSync 事件订阅

如何设置 AWS Appsync 请求超时限制 || AWSAppSync 客户端未提供回调

如何在 iOS 客户端中传递 AWS AppSync 自定义请求标头?

如何订阅 AWS AppSync 客户端中的多个事件?

AWS Appsync Javascript 查询示例和输入语法