【问题标题】:Fetch POST to Tsheets API returns "code": 417, "message": "Expectation Failed: data field missing"Fetch POST to Tsheets API 返回“code”:417,“message”:“Expectation Failed: data field missing”
【发布时间】:2019-01-27 06:33:26
【问题描述】:

我正在尝试创建一个 Zapier Zap,以通过 Tsheets API 从/向 Tsheets 拉取和推送数据。我已经成功地使用 Fetch 方法从 Tsheets 获取数据。我现在正在尝试发布数据,经过一天的谷歌搜索和搜索该网站后,我仍然没有想出解决方案,所以希望你们能给我一些线索。

这是我的邮政编码:

var payload = '{data:[{name:"aServiceItem1", customfield_id:"118530", short_code:"c1" }, {name:"aServiceItem2", customfield_id:"118530", short_code:"c1"}]}';
var endpoint = "https://rest.tsheets.com/api/v1/customfielditems";

fetch(endpoint, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer <my_token>"
  },
  data: JSON.stringify(payload)
})
  .then(function(response) {
    return response.text();
  })
  .then(function(responsebody) {
    var output = {
      response: responsebody
    };
    callback(null, output);
  })
  .catch(function(error) {
    callback(error);
  });

在 Zapier zap 开发控制台中,测试这个步骤,它编译没有错误并与 Tsheets API 通信,但是我得到的响应是

响应 { “错误”: { “代码”:417, “消息”:“预期失败:缺少数据字段” } }

据我所知,根据 Tsheets API 文档here,唯一的必填项是“名称”和“customfield_id”,据我所知,我在代码中提供了这些项。从该文档中有一个响应项 _status_extra 可能为我提供更多信息,但我没有在响应中看到该值。我可以修改我的代码来为我提供那个值吗?

有人知道为什么我的代码无法发布我的数据吗?

免责声明:POST 代码不是我自己的,我在这个网站上找到的。

TIA。

【问题讨论】:

  • 好的,所以错误状态 data field missing 并且在我的代码中我调用了我的数据 body 所以我现在将其更改为 数据,但我仍然得到相同的响应。
  • 正文中的数据标签不是问题。根据 Tsheets 支持的反馈,我更改了有效负载变量,但问题仍然存在。我现在认为这可能与我发布数据的方式有关——也许 JSON.stringify 不是发布数据的正确方法。这就是我今天要追求的路线。

标签: json api fetch-api zapier


【解决方案1】:

好吧,这就是最终奏效的方法。

var payload =  { "data": [{"name": "From Zapier2", "customfield_id": "118530", "short_code": "FZ2"}]};

var endpoint = "https://rest.tsheets.com/api/v1/customfielditems";

fetch(endpoint, {
    method: "POST",
    headers: {"Content-Type": "application/json", "Authorization": "Bearer <MyToken>"},
    body: JSON.stringify(payload)
    })
      .then(function(response) {
        return response.text();
      })
      .then(function(responsebody) {
        var output = {response: responsebody};
        callback(null, output);
      })
    .catch(function(error) {
        callback(null, error);
    });

【讨论】:

  • 我们如何在 java 中做到这一点?
猜你喜欢
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2013-05-29
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
相关资源
最近更新 更多