Fetch():请求正文格式错误

时间:2018-11-12 08:54:36

标签: javascript json fetch-api

我想向接受不同类型的正文请求的API发出提取请求:twitter句柄,facebook链接,电话号码等。正文的结构为:

body: {
    "typeOfHandle": "input"
}

由于句柄类型不同,我测试输入类型并将其相应地分配给主体,如下所示:

// handle is the input
let atSign = /^[@]/,    
    handleIsTwitter = atSign.test(handle.value),
    handleType;

handleIsTwitter ? handleType = `"` + "twitter" + `"` : console.log("not twitter");
let abc = `"` + handle.value + `"`;
let bodyOfFetch = `{${handleType}: ${abc}}`;
console.log("body: " + bodyOfFetch);
fetch("xxx", {
    method: "POST",
    headers: {
        Authorization: "xxx"
        },
    body: JSON.stringify(bodyOfFetch)
    })
    .then(function(res) {
        return res.json();
    })
    .then(function(json) {
        console.log(json);
    });

但是,此方法返回一个body malformed错误。当我静态执行请求时(即用静态文本替换变量,例如"twitter": "@alex"),它可以正常工作。我将语法翻了三倍,但我认为这不是问题。 API方面可能会出现问题吗?

1 个答案:

答案 0 :(得分:0)

在您的示例中,bodyOfFetch是字符串({"twitter": "@alex"})。您可以直接发送,这是:

fetch("xxx", {
method: "POST",
headers: {
    Authorization: "xxx"
    },
body: bodyOfFetch
})

或者您可以发送一个字符串化对象:

fetch("xxx", {
method: "POST",
headers: {
    Authorization: "xxx"
    },
body: JSON.stringify({[handleType]: abc})
})

但是发送JSON.stringify(bodyOfFetch)将对json字符串进行字符串化,这将添加周围的"并转义现有引号:"{\\"twitter\\": \\"@alex\\"}"

希望这会有所帮助。