我正在Zapier中集成intouch api。出于某种原因,该API设置为在body
个请求的GET
中而不是参数中接收查询。
这在Postman中都可以使用,但是z.request
函数似乎忽略了body
请求的GET
选项属性。
这是我的代码:
const test = (z, bundle) => {
const query = {
matterGuid: "bf508fcf-5f36-4191-93d6-fecd5a7f6a04",
getFields: ["matter.reference"],
};
return z.request({
method: "GET",
url: baseUrl + "/matters",
body: JSON.stringify(query), //I've tried body, json, raw, data, etc
});
};
这是我收到的回复:
{
status: 400,
json: { message: 'No request data received', success: false, errors: [] },
data: { message: 'No request data received', success: false, errors: [] },
content: '{"message":"No request data received","success":false,"errors":[]}',
request: {
method: 'GET',
headers: {
'user-agent': 'Zapier',
'x-intouch-o-token': 'xxxxxxxxxxxxxxxxxxx',
'Content-Type': 'application/json; charset=utf-8'
},
url: 'https://demo.intouch.cloud/api/v2/public/matters',
_addContext: [Function: addContext],
input: {
bundle: [Object],
_zapier: [Object],
_addContext: [Function: addContext]
},
merge: true,
removeMissingValuesFrom: { params: false, body: false },
replace: true,
skipThrowForStatus: false,
_requestStart: 2020-10-24T11:42:37.026Z
},
skipThrowForStatus: false,
headers: Headers {
[Symbol(map)]: [Object: null prototype] {
date: [Array],
'content-type': [Array],
'content-length': [Array],
connection: [Array],
'set-cookie': [Array],
'access-control-allow-origin': [Array],
'access-control-allow-headers': [Array],
'access-control-allow-methods': [Array],
'x-content-type-options': [Array],
'arr-disable-session-affinity': [Array],
'x-frame-options': [Array],
'strict-transport-security': [Array],
'cf-cache-status': [Array],
'cf-request-id': [Array],
'expect-ct': [Array],
'report-to': [Array],
nel: [Array],
server: [Array],
'cf-ray': [Array]
}
},
getHeader: [Function: getHeader],
throwForStatus: [Function],
_addContext: [Function: addContext]
}
答案 0 :(得分:0)
也许这不是理想的解决方案,但是我已经找到了解决方法。
I discovered that as part of the middleware在z.request
方法中,body
已从GET
请求中明确删除。
// No need for body on get
if (req.method === 'GET') {
delete req.body;
}
结果,我能够添加更多的中间件以将主体放回原处。幸运的是,添加到before
数组中的自定义中间件功能在Zapier自己的中间件之后运行,这意味着主体不受影响通过上面的功能。
这是我想出的解决方案:
const includeQuery = (request, z, bundle) => {
if (request.method ==='GET'){
if (bundle.inputData.matterGuid && bundle.inputData.getFields){
const query = {
matterGuid: bundle.inputData.matterGuid,
getFields: bundle.inputData.getFields.split(','),
};
request.body = JSON.stringify(query);
}
}
return request;
};
然后将其添加到导出对象的befores
数组中,如下所示:
befores: [includeApiKey, includeQuery],
afters: [handleBadResponses],
我真的很想知道是否有人对此问题有更好的解决方案。