我正在学习GraphQL,为了实践目的,我开发了一个后端,它将创建一个具有以下输入的规划师,任务是一个类型为Task的数组,dayDescription和waterGlassCount是String。我在TypeDefinition.js中遇到了一些问题,在这里,我创建了一个具有类型任务的任务的输入。请看一下我的TypeDefinition.js
const {gql} = require('apollo-server-express')
const typeDefs = gql`
type Planner{
id: ID
tasks: [Task]
dayDescription: String
waterGlassCount: String
}
type Task{
id: ID
taskDescription: String
shouldStrike: Boolean
}
type Query {
getAllPlanners: [Planner]
getPlanner(id:ID): Planner
getAllTasksOfPlanner(id:ID): [Task]
getEachTaskOfTasksOfPlanner(id: ID): Task
}
input TaskInput{
taskDescription: String
shouldStrike: Boolean
}
input PlannerInput{
tasks: [Task]
dayDescription: String
waterGlassCount: String
}
type Mutation {
createPlanner(planner: PlannerInput) : Planner
createTask(task: TaskInput): Task
deletePlanner(id:ID): String
deleteAllPlanners : String
toggleStrike(id:ID): Task
updatePlanner(id:ID, planner: PlannerInput): Planner
deleteAllTasks(id:ID): String
}
`;
module.exports=typeDefs;这是Resolvers.js的代码。
const Planner = require('./Models/PlannerModel');
const Task = require('./Models/TasksModel')
const resolvers = {
Query: {
getAllPlanners: async ()=>{
return await Planner.find()
},
getPlanner: async(parent, {id}, context, info)=> {
return await Planner.findById(id)
},
getAllTasksOfPlanner: async (parent, {id}, context, info) => {
const planner = await Planner.findById(id);
return planner.tasks
},
getEachTaskOfTasksOfPlanner: async (parent, {id}, context, info) => {
return await Task.findById(id)
},
},
Mutation:{
createPlanner: async(parent, args, context, info)=>{
const { dayDescription, waterGlassCount} = args.planner
const planner = new Planner({ dayDescription, waterGlassCount})
await planner.save()
return planner
},
createTask : async(parent, {taskDescription, shouldStrike}, context, info) => {
const task = new Task({taskDescription, shouldStrike})
await task.save();
return task
},
deletePlanner: async (parent, {id}, context, info) => {
await Planner.findByIdAndDelete(id);
return 'Planner Deleted'
},
deleteAllPlanners: async() => {
await Planner.deleteMany({})
},
toggleStrike : async (parent, {id}, context, info) =>{
const task = await Task.findById(id);
task.shouldStrike = !task.shouldStrike
return task
},
updatePlanner: async(parent, args, context, info)=>{
const {id}= args;
const {tasks, dayDescription, waterGlassCount} = args.planner;
const updates ={};
if(tasks !== undefined){
updates.tasks = tasks
}
if(dayDescription!== undefined){
updates.dayDescription = dayDescription
}
if(waterGlassCount !== undefined){
updates.waterGlassCount = waterGlassCount
}
const planner = Planner.findByIdAndUpdate(id, updates, {new:true});
return planner
},
}
};
module.exports = resolvers;下面是PlannerModel和TaskModel的代码
const mongoose = require("mongoose");
const PlannerSchema = new mongoose.Schema({
tasks: {
type: Array,
},
dayDescription: {
type: String,
},
waterGlassCount: {
type: String,
},
});
const Planner = mongoose.model("planner", PlannerSchema);
module.exports = Planner;const mongoose = require("mongoose");
const TaskSchema = new mongoose.Schema({
taskDescription: {
type: String,
},
shouldStrike:{
type: Boolean
}
});
const Task = mongoose.model("task", TaskSchema);
module.exports = Task;我在终端中得到的错误是" error : PlannerInput.tasks的类型必须是Input,但get : Task“。我如何解决这个问题?
发布于 2022-08-22 06:07:10
当您使用input类型时,此类型中的所有字段也必须是input类型(或标量)。在您的示例中,Task不是input类型。也许应该是TaskInput
https://stackoverflow.com/questions/73436123
复制相似问题