动态GraphQLObjectType

时间:2018-10-22 20:45:28

标签: graphql

我正在尝试使用graphQl创建动态的GraphQLObjectType,如下所示:

export const Project = (data) => {
  return new GraphQLObjectType({
    name: 'Project',
    fields: () => ({
      id: {
        type: GraphQLString
      },
      type: {
        type: GraphQLString
      },
      author: {
        type: User,
        resolve: (root, args, req) => {
          ...
        }
      }
    })
  })
};

我以这种方式在查询中调用此模型:

getProjectById: {
    type: Project(structure),
    args: {
      id: { type: GraphQLString }
    },
    resolve(source, args, req) {
      const projectService = new ProjectService(req);
      return projectService.getProjectById(args.id)
    }
  }

问题是这样做时我收到此错误:

  

模式必须包含唯一的命名类型,但是包含多个类型   名为“项目”

错误在哪里?你有什么建议吗?非常感谢

1 个答案:

答案 0 :(得分:1)

呼叫Project(structure)依次呼叫new GraphQLObjectType({name: 'Project',...})。如果多次调用Project(structure),则尝试声明具有相同名称的多个GraphQLObjectType(没有任何意义)。

如果要动态创建/声明GraphQLObjectType,则必须生成唯一的name属性。例如。像这样:

// assuming data.name is unique export const Project = (data) => { return new GraphQLObjectType({ name: `Project${data.name}`, ... }) }