Fetch (): запрос поврежден - PullRequest
0 голосов
/ 12 ноября 2018

Я хочу сделать запрос на выборку к API, который принимает различные типы запросов тела: хэндл твиттера, ссылку на 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 голосов
/ 12 ноября 2018

В вашем примере 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\\"}"

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...