gpt4 book ai didi

javascript - 通过 API 改变数据

转载 作者:行者123 更新时间:2023-11-30 19:10:31 25 4
gpt4 key购买 nike

每次在 Copper(我的 CRM)中创建新线索时,我都会使用 Zapier 创建一个 Monday.com 任务。问题是 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 使用 graphQL

最佳答案

编辑:我们将在下周发布一个新的 Copper 集成,所以如果您不想经历使用 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_multiple_column_valuescolumn_values 属性接受一个 JSON 格式的字符串

所以你真正想要的是:

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

关于javascript - 通过 API 改变数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58534326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com