【问题标题】:parsing HashMap failed, expected Object, but encountered Array解析 HashMap 失败,应为 Object,但遇到 Array
【发布时间】:2021-11-12 05:13:53
【问题描述】:

为了在 hasura 创建一个动作,我在 glitch.com 中使用以下 node.js 代码(仍处于实验阶段)-

const execute = async (gql_query, variables) => {
  const fetchResponse = await fetch(
    "https://example.com/v1/graphql",
    {
      method: "POST",
      body: JSON.stringify({
        query: gql_query,
        variables: variables
      })
    }
  );
  // console.log('DEBUG: ', fetchResponse);
  const data = await fetchResponse.json();
  console.log("DEBUG: ", data);
  return data;
};


// paste the code from codegen here

const ACTION_INSERT_PAYSLIP_GET_DRIVER_PAYMENT_DATA = `
query getDriverPaymentData ($orders: [Int!]!) {
  company_order (where: {company_order_id: {_in: $orders}}) {
    company_order_details (distinct_on: stage_cost_driver_id) {
      stage_cost_driver_id
      company_user {
        delivery_salary
      }
    }
  }
}`

// Request Handler
app.post('/action_insert_payslip', async (req, res) => {
  // get request input
  const { order_list } = req.body.input
  console.log('Input', order_list)
  const orders = order_list.order_id
  console.log('Item: ', orders)
  
  const { data:driverPaymentData, errors:driverPaymentError} = await execute(ACTION_INSERT_PAYSLIP_GET_DRIVER_PAYMENT_DATA, orders)
  console.log('Driver Payment Data: ', driverPaymentData)

  // run some business logic

  // success
  return res.json({
    // payslip_list: "<value>"
    payslip_list: order_list
  })

});

查询getDriverPaymentData 在 hasura api explorer 中产生如下输出:

{
  "data": {
    "company_order": [
      {
        "company_order_details": [
          {
            "stage_cost_driver_id": 1,
            "company_user": {
              "delivery_salary": 20
            }
          },
          {
            "stage_cost_driver_id": 6,
            "company_user": {
              "delivery_salary": 10
            }
          }
        ]
      },
      {
        "company_order_details": [
          {
            "stage_cost_driver_id": 6,
            "company_user": {
              "delivery_salary": 10
            }
          }
        ]
      }
    ]
  }
}

但在日志中,我得到以下输出:

Input { order_id: [ 247, 260, 253 ] }
Item:  [ 247, 260, 253 ]
DEBUG:  { errors:
   [ { extensions: [Object],
       message:
        'parsing HashMap failed, expected Object, but encountered Array' } ] }
Driver Payment Data:  undefined

它说它需要对象但遇到数组。但据我所见,我已经从 hasura 的 API 控制台的输出中获得了一个对象"data": {[....]},其中包含数组。

我在这里缺少什么?如何获取stage_cost_driver_iddelivery_salary的数据?

【问题讨论】:

    标签: javascript node.js json


    【解决方案1】:

    variables 不应该是一个对象吗?

         body: JSON.stringify({
            query: gql_query,
            variables: {orders: variables}
          })
    

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多