Graphql скалярный тип для значения, которое может быть строкой или объектом? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть API для регистрации, который возвращает ошибку строки или нуля,

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

Help?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

GraphQL имеет стандартный синтаксис для возврата значений ошибок , и ваша схема не должна напрямую учитывать это.

В вашей схеме я бы "безоговорочно" возвратил любой тип, который вы бы хотелиобычно ожидают возврата:

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" ]
    }
  ]
}
0 голосов
/ 12 декабря 2018

В GraphQL вы можете определить, какое поле может быть null, а что нет.Взгляните на документы: https://graphql.org/learn/schema/#object-types-and-fields

String - это один из встроенных скалярных типов - это типы, которые разрешаются в один скалярный объект и могутне иметь подвыборов в запросе.Мы рассмотрим скалярные типы позже.

String! означает, что поле не может иметь значение NULL, что означает, что служба GraphQL обещает всегда давать вам значение при запросе этого поля.На языке типов мы будем представлять те с восклицательным знаком.

Так что в случае вашей схемы String абсолютно нормально.Может быть нулевым

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