【问题标题】:Graphql scalar type for a value that can be string or object?可以是字符串或对象的值的Graphql标量类型?
【发布时间】:2018-12-13 04:38:27
【问题描述】:

我有一个用于注册的 api,它返回字符串或 null 的错误,

error: 'Email already use' or error: null 

如何在模式中构造它?我现在拥有的是这样的:

const typeDefs = gql`
  type Mutation {
    signUp(email: String, password: String): String
  }
`;

既然 typeof null 是对象,我怎样才能在 graphql 中这样呢?

signUp(email: String, password: String): String || Object

帮助?

【问题讨论】:

    标签: graphql apollo-server


    【解决方案1】:

    GraphQL 有一个 standard syntax for returning error values,您的架构不需要直接考虑这一点。

    在您的架构中,我将“无条件”返回您通常期望返回的任何类型:

    type UserAccount { ... }
    type Query {
      me: UserAccount # or null if not signed in
    }
    type Mutation {
      signUp(email: String!, password: String!): UserAccount!
    }
    

    如果不成功,您将返回一个空字段值(即使架构理论上声称不应该这样做)和一个错误。

    {
      "errors": [
        {
          "message": "It didn’t work",
          "locations": [ { "line": 2, "column": 3 } ],
          "path": [ "signUp" ]
        }
      ]
    }
    

    【讨论】:

      【解决方案2】:

      在 GraphQL 中,您可以定义哪些字段可以是 null,哪些不能。 看看文档: https://graphql.org/learn/schema/#object-types-and-fields

      String 是内置标量类型之一 - 这些类型 解析为单个标量对象,并且不能有子选择 查询。稍后我们将详细介绍标量类型。

      String! 表示该字段不可为空,表示 GraphQL 服务承诺 在您查询此字段时始终为您提供一个值。在类型 语言,我们将用感叹号表示。

      所以如果你的模式字符串是绝对没问题的。可以为空

      type Mutation {
        signUp(email: String, password: String): String
      }
      

      【讨论】:

        猜你喜欢
        • 2018-06-29
        • 2018-06-26
        • 1970-01-01
        • 2021-10-01
        • 2019-04-11
        • 1970-01-01
        • 2020-10-15
        • 1970-01-01
        • 2021-11-25
        相关资源
        最近更新 更多