当Key为integer类型时,GraphQL返回“名称必须匹配”错误

时间:2016-04-12 20:22:59

标签: graphql

我正在尝试将GraphQL与遗留服务一起使用,该服务返回一些JSON,其中一些键为整数。这是一个例子,

{
  "id": 1234,
  "image": {
    "45": "image1url",
    "90": "image2url"
  },
  "name": "I am legacy server"
}

当我尝试将"45“定义为GraphQL字段时,

var imageType = new graphql.GraphQLObjectType({
  name: 'Image',
  fields: {
    45: { type: graphql.GraphQLString },
    90: { type: graphql.GraphQLString }
  }
});

我收到以下错误,

  

错误:名称必须匹配/ ^ [_ a-zA-Z] [_ a-zA-Z0-9] * $ /但“45”不匹配。

我们如何将键作为整数场景处理?

1 个答案:

答案 0 :(得分:5)

GraphQL仅允许以ASCII字符或下划线开头的键。您可以使用resolve函数将旧名称映射到新名称。

var imageType = new graphql.GraphQLObjectType({
  name: 'Image',
  fields: {
    size45: { 
      type: graphql.GraphQLString,
      resolve: (parent) => parent['45'],
    },
    size90: { 
      type: graphql.GraphQLString,
      resolve: (parent) => parent['90']
    }
  }
});