触发突变时的GraphQLError模式验证

时间:2019-04-23 11:55:27

标签: graphql-js express-graphql

我正在尝试使用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上调试了同样的东西,可以看到它的值。我似乎无法找出问题所在。

1 个答案:

答案 0 :(得分:0)

我找出了错误所在。错误实际上是由我的猫鼬模式引起的,而不是由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错误,因此造成混淆。希望对别人有帮助。