Мутатор GraphQL с обязательными аргументами

Я пишу мутацию для схемы GraphQL:

const Schema = new GraphQLSchema({
  mutation: new GraphQLObjectType({
    name: 'Mutation',
    fields: () => ({
      person: {
        type: GraphQLString,
        args: {
          name: {type: GraphQLString},
          school: {type: GraphQLString},
        },
        resolve: mutatePerson,
      },
    }),
  }),
});

Я хочу убедиться, что mutatePerson будет работать только при наличии аргументов name и school. Как я могу это проверить?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
0
767
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Оболочка типа GraphQLNonNull используется для указания ненулевых полей и аргументов. Для полей это означает, что значение поля в результатах запроса не может быть нулевым. Для аргументов это означает, что аргумент не может быть исключен или иметь значение null. Итак, ваш код просто должен выглядеть примерно так:

args: {
  name: {
    type: new GraphQLNonNull(GraphQLString),
  },
  school: {
    type: new GraphQLNonNull(GraphQLString),
  },
},

Когда я делаю это, а затем опускаю аргумент name, я получаю исключение Field "person" argument "name" of type "String!" is required but not provided

Marc Bacvanski 16.06.2018 00:30

Разве это не то поведение, которое вы пытались реализовать? Если нет, поясните в своем вопросе, какое именно поведение вы пытаетесь реализовать.

Daniel Rearden 16.06.2018 02:02

Я бы хотел, чтобы клиенту был отправлен ответ об ошибке, а не просто сообщение об ошибке, распечатанное на консоли на стороне сервера.

Marc Bacvanski 16.06.2018 07:39

Эта ошибка будет возвращена клиенту как часть массива errors в ответе. Если вы этого не видите, нам нужно увидеть больше вашего серверного кода и знать, какой ответ получает клиент является при выполнении запроса.

Daniel Rearden 16.06.2018 14:09

Ах, это была проблема с моей обработкой ошибок. Спасибо!

Marc Bacvanski 18.06.2018 18:14

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

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const buinessSchema = new Schema({
  name: { type: String, required: true, unique: true },
  address: { type: String, required: true },
  phone: { type: String, required: true },
  email: { type: String, required: true },
  website: { type: String, required: true },
  currency: { type: String, required: true },
  aboutus: { type: String, required: true },
  terms: String,
  slogan: String,
  logo: { type: String, required: true }
});

module.exports = mongoose.model("Buiness", buinessSchema);

Другие вопросы по теме