我想向接受不同类型的正文请求的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方面可能会出现问题吗?
答案 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\\"}"
希望这会有所帮助。