我正在尝试使用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上调试了同样的东西,可以看到它的值。我似乎无法找出问题所在。
答案 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错误,因此造成混淆。希望对别人有帮助。