在 GraphQL 模式中创建类型时是否可以重命名字段? [英] Is it possible to rename a field when creating a type within a GraphQL schema?

查看:37
本文介绍了在 GraphQL 模式中创建类型时是否可以重命名字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在服务器上的以下 GraphQL 架构中定义 userType 时,如何将name"字段重命名为firstname",同时仍然引用 userTypecode>fakeDatabase?

When defining the userType in the following GraphQL schema on the server, how can I rename the "name" field to "firstname" while still referring to the "name" field in fakeDatabase?

以下代码片段复制自 官方 GraphQL 文档

The following code snippet has been copied from the official GraphQL docs

var express = require('express');
var graphqlHTTP = require('express-graphql');
var graphql = require('graphql');

// Maps id to User object
var fakeDatabase = {
  'a': {
    id: 'a',
    name: 'alice',
  },
  'b': {
    id: 'b',
    name: 'bob',
  },
};

// Define the User type
var userType = new graphql.GraphQLObjectType({
  name: 'User',
  fields: {
    id: { type: graphql.GraphQLString },
    // How can I change the name of this field to "firstname" while still referencing "name" in our database?
    name: { type: graphql.GraphQLString },
  }
});

// Define the Query type
var queryType = new graphql.GraphQLObjectType({
  name: 'Query',
  fields: {
    user: {
      type: userType,
      // `args` describes the arguments that the `user` query accepts
      args: {
        id: { type: graphql.GraphQLString }
      },
      resolve: function (_, {id}) {
        return fakeDatabase[id];
      }
    }
  }
});

var schema = new graphql.GraphQLSchema({query: queryType});

var app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  graphiql: true,
}));
app.listen(4000);
console.log('Running a GraphQL API server at localhost:4000/graphql');

推荐答案

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

Resolvers can be used for any type, not just Query and Mutation. That means you can easily do something like this:

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

解析器函数指定,给定父值,该字段的参数和上下文,类型的任何实例的字段将解析为什么.它甚至可以每次总是返回相同的静态值.

The resolver function specifies, given the parent value, arguments for that field and the context, what a field for any instance of a type will resolve to. It could even always return the same static value each time.

这篇关于在 GraphQL 模式中创建类型时是否可以重命名字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆