【问题标题】:GraphQL selection set parsingGraphQL 选择集解析
【发布时间】:2021-03-21 22:03:54
【问题描述】:

我的 AppSync Lambda 解析器中有这个 GraphQL 选择集:

{
  recommendationId
  items {
    id
    name
  }
}

我需要items 中的选择集,这将是严重嵌套的。

我怎样才能得到这个输出?

{
  id
  name
}

上下文(将业务对象替换为Object):

schema.graphql

type Object {
 id: ID!
 name: String!
}

type Query {
 getObjectsById(objectsById: ObjectsByID!): [Object] 
 listRecommendedObjects(personId: ID!): RecommendedObjects
}

input ObjectsByID {
  ids: [ID!]!
}

type RecommendedObjects {
  items: [Object]
  recommendationId: String
}

内部解析器:

const buildQuery = (selectionSetGraphQL) =>
  `query MyQuery($objectsById: ObjectsByID!) {
    getObjectsById(objectsById: $objectsById) ${selectionSetGraphQL}
  }`

目标:

调用 listRecommendedObjects 将调用自定义 lambda,该 lambda 将与 AWS Personalize 对话以获取项目 ID。 然后,我想使用 Object 的选择集在该 Lambda 中调用 getObjectsById 以从 Personalize 获取项目 ID 的数据

【问题讨论】:

  • 只需遍历选择集的字段,直到找到items 一个? javascript代码在哪里?
  • 不是对象,是字符串。
  • 等等,你还没有解析查询?请发布正在处理此问题的代码以提供一些上下文。
  • @Bergi 我确实使用信息对象:docs.aws.amazon.com/appsync/latest/devguide/…
  • @Bergi 可以使用 graphql-js。谢谢

标签: javascript graphql aws-appsync


【解决方案1】:

我使用graphql-js 得到了一个明智的解决方案。

我使用parse,然后选择我需要的,然后将其转换回带有print的字符串

const { parse, print } = require("graphql/language")

const document = parse('{ id items {id name} }')

const subSet = document
  .definitions[0]
  .selectionSet
  .selections
  .find(elem => elem.name.value == 'items')

print(subSet) // => `items {id name}`

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 2018-08-01
    • 2017-09-19
    • 1970-01-01
    • 2018-07-31
    • 2019-10-03
    • 2021-11-22
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多