首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在GraphQL查询中发送数组数据作为输入?

如何在GraphQL查询中发送数组数据作为输入?
EN

Stack Overflow用户
提问于 2022-08-21 16:09:46
回答 1查看 22关注 0票数 0

我正在学习GraphQL,为了实践目的,我开发了一个后端,它将创建一个具有以下输入的规划师,任务是一个类型为Task的数组,dayDescription和waterGlassCount是String。我在TypeDefinition.js中遇到了一些问题,在这里,我创建了一个具有类型任务的任务的输入。请看一下我的TypeDefinition.js

代码语言:javascript
复制
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的代码。

代码语言:javascript
复制
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的代码

代码语言:javascript
复制
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;
代码语言:javascript
复制
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“。我如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-22 06:07:10

当您使用input类型时,此类型中的所有字段也必须是input类型(或标量)。在您的示例中,Task不是input类型。也许应该是TaskInput

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73436123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档