微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Zapier应用程序:发送带有GET请求的正文

如何解决Zapier应用程序:发送带有GET请求的正文

我正在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',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
      },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]
    }

解决方法

也许这不是理想的解决方案,但是我已经找到了解决方法。

I discovered that as part of the middlewarez.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],

我真的很想知道是否有人对此问题有更好的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。