Graphql标量类型是否可以是字符串或对象的值?

时间:2018-12-12 03:44:18

标签: graphql apollo-server

我有一个注册用的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

帮助?

2 个答案:

答案 0 :(得分: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" ]
    }
  ]
}

答案 1 :(得分:0)

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

  

字符串是内置标量类型之一-这些类型的   解析为单个标量对象,并且不能在其中进行子选择   查询。我们将在以后再讨论标量类型。

     

字符串!表示该字段不可为空,这表示GraphQL服务承诺   在查询此字段时始终为您提供一个值。在类型   语言,我们将代表那些带有感叹号的人。

因此,对于您的架构,String绝对可以。可以为空

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