【问题标题】:My POST request is failing with a 'Request with GET/HEAD method cannot have body' error我的 POST 请求失败,出现“使用 GET/HEAD 方法的请求不能有正文”错误
【发布时间】:2021-11-26 22:08:03
【问题描述】:

我正在尝试使用 Zoho Creator 的添加记录数据 API (https://www.zoho.com/creator/help/api/v2/add-records.html)

这里是帮助您了解我的问题的 URL。在我运行 POST 方法之前,下面的 URL 将向您显示所有涉及的变量的 JSON。

https://vp-expo-node-server.herokuapp.com/eticket/

上面的这个链接会显示这个控制器的结果


exports.addOneExhibitorToCreator = async function(req, res, next) {
  try {
    const token = await getAccessToken();
    const url = process.env.ZOHO_CREATOR_FORM_URL + "/Add_Organisation";
    // const organisation = req.body;
    const organisation = {
      data: {
        isActive: true,
        Organisation_Name: "Test With Alim",
        Type: "Exhibitor",
        Short_Name: "test",
        Email: "test@fourplusmedia.com",
      },
    };

    const options = {
      Method: "POST",
      Headers: {
        "Content-Type": "application/json",
        Authorization: "Zoho-oauthtoken " + token,
      },
      body: JSON.stringify(organisation),
    };

    const functionForResponse = "const response = await fetch(url, options);";

    // const response = await fetch(url, options);
    // const data = await response.json();

    res.status(200).json({
      status: "success",
      token,
      options,
      url,
      organisation,
      functionForResponse,
    });
  } catch (err) {
    console.log(err);
    res.status(500).json({
      err,
    });
  }
};


当我在上面的控制器中取消注释这两行时

    const response = await fetch(url, options);
    const data = await response.json();

我得到了这个结果

https://vp-expo-node-server.herokuapp.com/eticket/response

由于我不知道如何在浏览器上显示错误,因此我尝试对其进行控制台记录,但在控制台中出现此错误

TypeError: Request with GET/HEAD method cannot have body
    at new Request (/Applications/MAMP/htdocs/vp-expo-node-server/node_modules/node-fetch/lib/index.js:1199:10)
    at /Applications/MAMP/htdocs/vp-expo-node-server/node_modules/node-fetch/lib/index.js:1409:19
    at new Promise (<anonymous>)
    at fetch (/Applications/MAMP/htdocs/vp-expo-node-server/node_modules/node-fetch/lib/index.js:1407:9)
    at exports.addOneExhibitorToCreatorResponse (/Applications/MAMP/htdocs/vp-expo-node-server/controllers/eticketController.js:82:28)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

我可以确认 console.log 中的这一行

    at exports.addOneExhibitorToCreatorResponse (/Applications/MAMP/htdocs/vp-expo-node-server/controllers/eticketController.js:82:28)

指向未注释的行...

所以我在这两行中做错了。但据我所知,这是发送 POST 请求的正确方法。我不知道 POST 请求如何获得Request with GET/HEAD method cannot have body 错误。

任何帮助将不胜感激。我仔细检查了它,我什至向 Zoho 寻求帮助(他们提到这是客户端的事情,他们帮不上什么忙)

【问题讨论】:

  • Method: 应该是 method:Header: 应该是 header:。 JavaScript 区分大小写。
  • 您正在将(未使用的)属性Method 设置为POST,但(实际使用的)属性method 仍处于其默认值GET...请注意以下情况m! (headers 也一样。)
  • 除了@Barmar 的评论,这可能会有所帮助:developer.mozilla.org/en-US/docs/Web/API/Fetch_API/…
  • 感谢 CherryDT 和 Barmar 以及 majusebetter……你们是对的……我觉得有点愚蠢,没有注意到显而易见的事情,为此损失了 2 天……;-).. 谢谢大家……

标签: javascript fetch zoho


【解决方案1】:

我在 cmets 中得到了答案,但只是发布一个答案,以防其他人在尝试发送 POST 请求时遇到“REQUEST WITH GET/HEAD METHOD”错误。

正如@CherryDT 在我的案例中指出的那样,没有使用 POST 方法,因为我将“方法”拼错为“方法”(我犯了与“标题”相同的错误作为“标题”)..

所以“方法”属性根本没有被使用,它默认为“GET”......因此出现错误。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2019-02-05
    • 2011-12-11
    • 1970-01-01
    • 2018-04-22
    • 2021-11-12
    相关资源
    最近更新 更多