如何在graphQl中制作具有确定值的自定义类型

Posted

技术标签:

【中文标题】如何在graphQl中制作具有确定值的自定义类型【英文标题】:How to make custom type with definite value in graphQl 【发布时间】:2019-12-06 14:26:11 【问题描述】:

这是我第一次使用 graphQL,我有两个相关的问题。

我已经模糊地浏览了这些文档,并且正在构建自己的东西。

所以,我现在的设置非常简单。在我的应用程序的起点,我有这样的东西

const express = require('express')
const app = express();
const graphqlHTTP = require("express-graphql")
const schema = require('./schema/schema')

app.use("/graphql", graphqlHTTP(
  schema: schema
));

app.get('/', (req, res) => 
  res.json("message": "Welcome to EasyNotes application. Take notes quickly. Organize and keep track of all your notes.");
);


//Listen to specific post 
app.listen(4000, () => 
  console.log("Listening for request on port 4000")
);

我的 Schema 看起来像这样

const graphql = require("graphql")

const  
  GraphQLObjectType, 
  GraphQLString, 
  GraphQLSchema,
  GraphQLList,
  GraphQLID,
  GraphQLNonNull,
  GraphQLInt
   = graphql


const GenderType = new GraphQLObjectType(
  name: 'Gender',
  fields: () => (
    male: 

    
  )
)


  const UserType = new GraphQLObjectType(
    name: 'User', // Importance of Name here
    fields: () => (
      id: 
        type: GraphQLID
      ,
      name: 
        type: GraphQLString
      ,
      gender: 
        type: GenderType // Create custom type for it later
      
    )
  )

在我上面的代码 sn-p 中,在 UserType 内部,我希望我的 GenderType 是男性或女性。如何编写我的自定义类型以使其仅接受值“男性”或“女性”?

【问题讨论】:

【参考方案1】:

Scalar Types 和 Enum Types 都可以实现您想要做的事情。在您的情况下,您可能想要使用枚举,因为您有一个小的有限允许值列表。使用枚举类型将在 GraphiQL 的文档中显示允许的值。在大多数 GraphQL API 中,枚举值使用所有大写值,但您可以使用value 属性将female 值透明地映射到FEMALE。例如,这将允许您在服务器端将值视为小写(我们经常这样做,因为值以小写来自我们的 postgres)。这里有一些灵感代码:

const GenderType = new GraphQLEnumType(
  name: 'Gender',
  values: 
    FEMALE: 
      value: 'female'
    ,
    MALE: 
      value: 'male'
    
  
);

【讨论】:

以上是关于如何在graphQl中制作具有确定值的自定义类型的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 突变中的自定义类型

Graphql-java 中的自定义标量

如何在我的自定义类型中包含非命名模块 TS 定义

如何在 GraphQL 中访问 ACF 关系字段中的自定义字段?

具有获取 json 值的片段中的自定义适配器

使用graphql代码生成器时如何将自定义标量类型映射到打字稿类型?