简体   繁体   English

GraphQL 突变创建文档,该文档是 object 的数组

[英]GraphQL mutation create document which is array of object

I am making a server with GraphQL and this is my schema:我正在使用 GraphQL 制作服务器,这是我的架构:

const PostType = new GraphQLObjectType({
  name: 'Post',
  fields: () => ({
    id: {
      type: GraphQLID,
    },
    caption: {type: GraphQLString},
    createdAt: {type: GraphQLString},
    likeCount: {type: GraphQLInt},
    displayName: {type: GraphQLString},
    likedList: {
      type: new GraphQLList(GraphQLString),
    },
    uid: {
      type: GraphQLID,
    },
    uploadedMediaList: {
      type: new GraphQLList(MediaListType),
      resolve(parent, args) {
        return _.filter(mediaListDB, {postId: parent.id});
      },
    },
  }),
});

const MediaListType = new GraphQLObjectType({
  name: 'MediaList',
  fields: () => ({
    id: {
      type: GraphQLID,
    },
    mediaUrl: {type: GraphQLString},
    type: {type: GraphQLString},
    postId: {type: GraphQLID},
  }),
});

const Mutation = new GraphQLObjectType({
  name: 'Mutation',
  fields: {
    createPost: {
      type: PostType,
      args: {
        id: {type: GraphQLID},
        caption: {type: new GraphQLNonNull(GraphQLString)},
        createdAt: {type: new GraphQLNonNull(GraphQLString)},
        likeCount: {type: new GraphQLNonNull(GraphQLInt)},
        displayName: {type: new GraphQLNonNull(GraphQLString)},
        likedList: {type: new GraphQLNonNull(new GraphQLList(GraphQLString))},
        uid: {type: new GraphQLNonNull(GraphQLString)},
        uploadedMediaList: {
          type: new GraphQLNonNull(new GraphQLList(MediaListType)),
        },
      },
      resolve(parent, args) {
        const {
          id,
          caption,
          createdAt,
          likeCount,
          displayName,
          likedList,
          uid,
          uploadedMediaList,
        } = args;

        return postDB.unshift({
          id,
          caption,
          createdAt,
          likeCount,
          displayName,
          likedList,
          uid,
          uploadedMediaList,
        });
      },
    },
  },
});

const RootQuery = new GraphQLObjectType({
  name: 'RootQueryType',
  fields: {
    post: {
      type: PostType,
      args: {
        id: {type: GraphQLID},
      },
      resolve(parent, args) {
        return _.find(postDB, {id: args.id});
      },
    },
    posts: {
      type: new GraphQLList(PostType),
      resolve(parent, args) {
        return postDB;
      },
    },
    mediaList: {
      type: MediaListType,
      args: {
        id: {type: GraphQLID},
      },
      resolve(parent, args) {
        return _.find(mediaListDB, {id: args.id});
      },
    },
    mediaLists: {
      type: new GraphQLList(MediaListType),
      resolve(parent, args) {
        return mediaListDB;
      },
    },
  },
});

module.exports = new GraphQLSchema({
  query: RootQuery,
  mutation: Mutation
});

As you can see, schema PostType has an property is an array of MediaListType items, each of items is an object.如您所见,模式PostType有一个属性是MediaListType项的数组,每个项都是 object。 Now in the Mutation , I got a query createPost and I define that the uploadedMediaList is a GraphQLList of MediaList and I want my query like this现在在Mutation中,我得到了一个查询createPost并定义了uploadedMediaListGraphQLListMediaList ,我希望我的查询像这样

mutation {
  createPost(id: "101", createdAt: "1 25 13/03/2021", caption: "Hope it work", likeCount: 1000, displayName: "Connor McKnight", likedList: ["Nguoi thu nhat", "Ai do nua"], uid: "5y7325y4732", uploadedMediaList: [{id: "99", mediaUrl: "fdsnjakfndjksanfdjksanfjkdsanfkdsa", type: "dummy type", postId: "101"}]) {
    likeCount
    id
    createdAt
  }
}

This is the error I got:这是我得到的错误:

{
  "errors": [
    {
      "message": "The type of Mutation.createPost(uploadedMediaList:) must be Input Type but got: [MediaList]!."
    }
  ]
}

Please help me tackle it, thank you so much and have a good day请帮我解决它,非常感谢你,祝你有美好的一天

In your code, MediaList is of object type and hence cannot be used as an input.在您的代码中, MediaList属于 object 类型,因此不能用作输入。 In order to receive it as an input, you'll need to create another GraphQL type:为了接收它作为输入,您需要创建另一个 GraphQL 类型:

const MediaListInputType = new GraphQLInputObjectType({
  name: 'MediaListInput',
  fields: () => ({
    id: {
      type: GraphQLID,
    },
    mediaUrl: {type: GraphQLString},
    type: {type: GraphQLString},
    postId: {type: GraphQLID},
  }),
});

Then you will need to change your mutation to use this type:然后你需要改变你的突变来使用这种类型:

// ...rest of the code
uploadedMediaList: {
    type: new GraphQLNonNull(new GraphQLList(MediaListInputType)),
}

Refer GraphQLInputObjectType请参阅GraphQLInputObjectType

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM