GraphQL - 参数未在突变中传递到后端

Posted

技术标签:

【中文标题】GraphQL - 参数未在突变中传递到后端【英文标题】:GraphQL - Parameters not being passed to backend in mutation 【发布时间】:2022-01-24 04:06:39 【问题描述】:

我刚开始使用 GraphQL 和突变,遇到了这个问题。

当我尝试将数据传递到我的 GraphQL 服务器时,似乎 args 参数没有注册我尝试传递的 args。

当我console.log 他们时,他们显示为undefined,但该方法正在工作并接收请求。

下面有什么不正确的地方吗?我只是在思考它,所以如果有任何反馈,我将不胜感激。

这是我尝试从 GraphiQL 运行的查询

mutation 
  addDelivery(
    carrier: "AusPost", 
    goodsDelivered:[],
    receiver: 
      first_name:"ll",
      last_name:"test",
      receiver_email: "bbb@bbb.com.au"
    ,
    consignmentNumber:"AAAA000",
    poNumber:"PO0000"
  ) 
    id
    carrier 
      iD
      carrier_name
    
  

我的架构:

type ReceiverType
    first_name: String
    last_name: String
    receiver_email: String


type ItemType 
    item_type: String,
    quantity: String


type Deliveries 
    carrier: Carrier
    consignmentNumber: String
    goodsDelivered: [String]
    id: ID
    items: [ItemType]
    poNumber: String
    receiver: ReceiverType


type Carrier
    iD: ID
    carrier_name: String


input Item 
    item_type: String,
    quantity: String


type Query 
    deliveries: [Deliveries]


input Receiver 
    first_name: String
    last_name: String
    receiver_email: String


type Mutation 
    addDelivery(
        carrier: String!,
        consignmentNumber: String!,
        goodsDelivered: [Item]!,
        poNumber: String!,
        receiver: [Receiver]! 
    ) : Deliveries

我的添加交付解析器

addDelivery: async (parent, args, context, info) => 
    const delivery = new Deliveries(
        receiver: 
            first_name: args.first_name,
            last_name: args.last_name,
            receiver_email: args.receiver_email
        ,
        items: args.items,
        consignment_no: args.consignment_no,
        po_number: args.po_number,
        carrier_id: args.carrier_id,
        delivery_id: args.delivery_id
    );

    await delivery.save();
    return delivery;

【问题讨论】:

【参考方案1】:

我将签名更改为以下,它解决了问题。

addDelivery: async (receiver, items, consignment_no, po_number, carrier_id, delivery_id) => 

【讨论】:

以上是关于GraphQL - 参数未在突变中传递到后端的主要内容,如果未能解决你的问题,请参考以下文章

在 type-graphql 突变中传递多个参数以及 `GraphQLUpload`

如何在 sangria-graphql 中执行突变?

GraphQL - 将枚举值作为参数直接传递给突变?

在反应中将道具作为graphql突变参数传递

如何将对象列表或数组传递到旨在更新单个对象的 GraphQL 突变中?

Apollo GraphQL:未在突变子字段上调用解析器