Проверка схемы GraphQLError при запуске мутации

Я пробую свои силы в GraphQL и, кажется, столкнулся со странной ошибкой.

Вот моя мутация

    const createNewTask = {
        name: "AddATask",
        description: "A mutation using which you can add a task to the todo list",
        type: taskType,
        args: {
            taskName: {
                type: new gql.GraphQLNonNull(gql.GraphQLString)
            },
            authorId: {
                type: new gql.GraphQLNonNull(gql.GraphQLString)
            }
        },
        async resolve(_, params) {
            try {
                const task = newTask(params.taskName);
                return await task.save();
            } catch (err) {
                throw new Error(err);
            }
        }
    };

Тип задачи определяется следующим образом

const taskType = new gql.GraphQLObjectType({
    name: "task",
    description: "GraphQL type for the Task object",
    fields: () => {
        return {
            id: {
                type: gql.GraphQLNonNull(gql.GraphQLID)
            },
            taskName: {
                type: gql.GraphQLNonNull(gql.GraphQLString)
            },
            taskDone: {
                type: gql.GraphQLNonNull(gql.GraphQLBoolean)
            },
            authorId: {
                type: gql.GraphQLNonNull(gql.GraphQLString)
            }
        }
    }
});

Я пытаюсь добавить задачу, используя игровую площадку graphiql.

mutation {
  addTask(taskName: "Get something", authorId: "5cb8c2371ada735a84ec8403") {
    id
    taskName
    taskDone
    authorId
  }
}

Когда я делаю этот запрос, я получаю следующую ошибку

"ValidationError: authorId: Path `authorId` is required."

Но когда я удаляю поле authorId из кода мутации и отправляю мутацию без authorId, я получаю эту ошибку

"Unknown argument \"authorId\" on field \"addTask\" of type \"Mutation\"."

Таким образом, это доказывает, что authorId доступен в запросе. Я отлаживал то же самое на vscode и вижу значение. Я не могу понять, что не так.


person Giridhar Karnik    schedule 23.04.2019    source источник


Ответы (1)


Я понял, в чем ошибка. На самом деле ошибка была вызвана моей схемой мангуста, а не схемой graphql.

const taskSchema = new Schema(
    {
        taskName: {
            type: String,
            required: true
        },
        taskDone: {
            type: Boolean,
            required: true
        },
        authorId: {
            type: mongoose.Types.ObjectId,
            required: true
        }
    },
    {
        collection: "tasks"
    }
);

Но что странно, так это то, что в окончательном сообщении об ошибке нет никаких указаний на то, что это была ошибка проверки схемы мангуста. И в ошибке указано, что это ошибка graphql, отсюда и путаница. Надеюсь, это поможет кому-то.

person Giridhar Karnik    schedule 23.04.2019