在GraphQL模式中创建类型时可以重命名字段吗?

时间:2018-10-02 08:16:22

标签: graphql

在服务器上的以下GraphQL模式中定义userType时,如何在仍引用{{1}中的“ name”字段的同时将“ name”字段重命名为“ firstname” }?

以下代码段已从official GraphQL docs复制

fakeDatabase

3 个答案:

答案 0 :(得分:2)

还有一个graphql-tools库,可让您转换架构,我们将其用于架构拼接服务。

const { RenameTypes, transformSchema } = require("graphql-tools");

/*
 * Schema transformations:
 * Types:
 *  <> Task -> GetTask
 */

const transformMySchema = schema => {
  return transformSchema(schema, [
    new RenameTypes(function(name) {
      return name == "Task" ? "GetTask" : name;
    }),
  ]);
};

了解更多:https://github.com/apollographql/graphql-tools/blob/513108b1a6928730e347191527cba07d68aadb74/docs/source/schema-transforms.md#modifying-types

这能回答问题吗?

答案 1 :(得分:1)

解析器可用于任何类型,而不仅仅是QueryMutation。这意味着您可以轻松地执行以下操作:

const userType = new graphql.GraphQLObjectType({
  name: 'User',
  fields: {
    id: {
      type: graphql.GraphQLString,
    },
    firstName: {
      type: graphql.GraphQLString,
      resolve: (user, args, ctx) => user.name
    },
  }
})

在给定父值的情况下,resolver函数指定该字段和上下文的参数,该类型的任何实例的字段将解析为什么。甚至每次都可以始终返回相同的静态值。

答案 2 :(得分:1)

正是丹尼尔所说的。解析程序名称是什么都无所谓,您将从数据库中解析user.name