Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过API修改数据_Javascript_Json_Graphql_Monday.com - Fatal编程技术网

Javascript 通过API修改数据

Javascript 通过API修改数据,javascript,json,graphql,monday.com,Javascript,Json,Graphql,Monday.com,我正在使用Zapier创建一个Monday.com任务,每次在Copper(我的CRM)中创建一个新lead。问题是Zapier只允许将信息存储在Monday.com上的任务名称中。我已经创建了一个webhook,它应该解析Monday.com任务标题中所需的数据,并根据需要更新列值。但是,我的代码目前没有这样做。创建任务时,我没有收到任何错误,但列填充不正确。我不确定是什么问题 代码如下: const express = require('express') const path = requ

我正在使用Zapier创建一个Monday.com任务,每次在Copper(我的CRM)中创建一个新lead。问题是Zapier只允许将信息存储在Monday.com上的任务名称中。我已经创建了一个webhook,它应该解析Monday.com任务标题中所需的数据,并根据需要更新列值。但是,我的代码目前没有这样做。创建任务时,我没有收到任何错误,但列填充不正确。我不确定是什么问题

代码如下:

const express = require('express')
const path = require('path')
const bodyParser = require('body-parser')
const PORT = process.env.PORT || 5000

const updateMultipleColumnValues = require("./updateMultipleColumnValue").updateMultipleColumnValue;

const app = express();

  app.use( bodyParser.json());
  app.use(bodyParser.urlencoded({extended: true}));
  app.set('views', path.join(__dirname, 'views'));
  app.set('view engine', 'ejs');



  app.post('/', (req, res) => {
    console.log(req.body)
    const { boardId, pulseId } = req.body.event

      let parsedRecord = extractData(req.body.event.pulseName)
      console.log(parsedRecord);

      let newData = {
        "text0": parsedRecord.DURATION
      };

      let stringData = JSON.stringify(newData);

      console.log(boardId);
      console.log(pulseId);
      console.log(stringData);
      updateMultipleColumnValues(boardId, pulseId, stringData);
    res.json(parsedRecord);
  });

  app.listen(PORT, () => console.log(`Listening on ${ PORT }`));





// console.log(extractData(targetStr, fields));

function extractData(str) {
  let fields = ['DATE', 'TIME', 'DURATION', 'TYPE'];

  return str.split(/\s*\|\s*/).reduce((res, entry) => {
    let dat = entry.split(/\s*:\s*/);
    return fields.indexOf(dat[0]) > -1 ? Object.assign(res, { [dat[0]]: dat[1] }) : res;
  }, {});
}
以下是updateMultipleColumnValue文件:

const executeMondayQuery = require("./executeMondayQuery").executeMondayQuery;

const updateMultipleColumnValue = async (boardId, itemId, newData) => {
  const updateColumnValueBody = {
    query: `mutation {
                change_multiple_column_values(
                board_id: ${boardId},
                item_id: ${itemId},
                column_values: ${newData}
                ) { id }
            }`
  };

  await executeMondayQuery(updateColumnValueBody);
};

exports.updateMultipleColumnValue = updateMultipleColumnValue;

Monday.com use graphQL

编辑:下周我们将发布一个新的铜缆集成,因此如果您不想用Zapier重新创建它,您可以等待这次发布

无论如何,在这个实现中可能需要解决两件事

TL;DR溶液 在发送字符串之前,需要对其进行转义。这应该起作用:

const updateColumnValueBody = {
    query: `mutation {
                change_multiple_column_values(
                board_id: ${boardId},
                item_id: ${itemId},
                column_values: "${newData.replace(/"/g, '\\"')}"
                ) { id }
            }`
  };

关于GraphQL错误处理的一点建议 我不确定
executeMondayQuery
函数中的逻辑是什么,但是如果在执行GraphQL变异期间发生解析错误,HTTP响应本身仍然有一个200状态代码

响应主体将包含一个
errors
数组,描述有效负载中的所有语法错误

GraphQL JSON属性中的转义字符串 在这种特定情况下,问题可能是您的
newData
(最初是
stringData
)没有转义,也没有用双引号括起来(表示它是字符串)

发生的情况是,在字符串插值之后,您的有效负载如下所示:

mutation {
  change_multiple_column_values(
    board_id: 12345678,
    item_id: 87654321,
    column_values: {"text": "123"}
  ) { id }
}
但是
change\u multiple\u column\u values
column\u values
属性接受JSON格式的字符串

所以你真正想要的是:

mutation {
  change_multiple_column_values(
    board_id: 12345678,
    item_id: 87654321,
    column_values: "{\"text\": \"123\"}"
  ) { id }
}