【问题标题】:GraphQL does not allow to insert array objects in NodeJSGraphQL 不允许在 NodeJS 中插入数组对象
【发布时间】:2019-12-04 22:39:08
【问题描述】:

不幸的是,插入数组对象时出错。代码在这里

GraphQL 架构

type Member {
  _id: ID!
  member_id: Int!
  first_name: String!
  last_name: String
  username: String
  date: String
}

input MemberInput {
  member_id: Int!
  first_name: String!
  last_name: String
  username: String
  date: String
}

type RootQuery {
  groups: [Group!]!
  members: [Member!]!
  member(member_id: Int!): Member!
}
type RootMutation {
  createGroup(groupInput: GroupInput): Group
  createMember(memberInput: [MemberInput]): Member
}
schema {
  query: RootQuery
  mutation: RootMutation
}

制作数组对象

const mutatedAdminsDetails = groupAdminsFull.map(groupAdmin => {
  const rObj = {
    member_id: groupAdmin.id,
    first_name: groupAdmin.first_name,
    last_name: groupAdmin.last_name || '',
    username: groupAdmin.username || '',
    date: new Date().toISOString(),
  };
  return rObj;
});

数组对象mutatedAdminsDetails

[
  {
    member_id: 152356245,
    first_name: 'Subhash',
    last_name: 'Akbar',
    username: 'subhashbhai',
    date: '2019-07-26T14:39:01.314Z'
  },
  {
    member_id: 12312322,
    first_name: 'Shreef',
    last_name: '',
    username: '',
    date: '2019-07-26T14:39:01.314Z'
  }
]

GraphQL 变异查询

const requestAdminBody = {
  query: `
      mutation {
        createMember(memberInput:
          [${mutatedAdminsDetails}]
        ) {
          _id
          member_id
          first_name:
        }
      }
    `
};

API 请求

const insertAdmins = await fetch('http://localhost:3000/graphql', {
  method: 'POST',
  body: JSON.stringify(requestAdminBody),
  headers: {
    'Content-Type': 'application/json',
  }
})
  .then(res => {
    return res.json();
  })
  .then(resData =>
    resData
  )
  .catch(err => err )

终端出错

【问题讨论】:

  • 对于第二个错误group_id doesn't exist in the Member's schema definition
  • @VladMamaev 已更改,现在出现此错误{ errors: [ { message: 'Syntax Error: Expected Name, found [', locations: [Array] } ] }
  • @Fraction 修正了错字

标签: javascript node.js mongodb mongoose graphql


【解决方案1】:

尝试将您的突变更新为:

const requestAdminBody = {
  query: `
      mutation CreateMember($memberInput: [MemberInput]){
        createMember(memberInput: $memberInput) {
          _id
          first_name
        }
      }
    `,
  variables: { memberInput: mutatedAdminsDetails }
};

【讨论】:

  • 收到此错误{ errors: [ { message: 'Must provide query string.' } ] }
  • 不幸的是现在得到这个错误errors: [ { message: 'Unknown type "memberInput". Did you mean "MemberInput" or "Member"?', locations: [Array] }, { message: 'Cannot query field "name" on type ' + '"Member". Did you mean "date" or ' + '"username"?', locations: [Array] } ]
  • 消息告诉你答案,我已经更新了我的答案^^
  • 收到此错误{ errors: [ { message: 'Cannot return null for non-nullable field Member._id.', locations: [Array], path: [Array] } ], data: { createMember: null } } 有什么想法吗?
  • 我认为你没有从你的数据库中返回创建的成员,你可以尝试类似:const doc = await Member.create(member); return Member.findById(doc._id)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多