недопустимая ошибка тела ответа json при экспресс-извлечении узла с использованием formData - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь выполнить http-запрос от nodeJS, это следующий запрос:

    const form = new FormData();
    form.append('text 1', 'sometext');
    form.append('file', fs.createReadStream("foo.txt"));
    fetch('url', {
            method: 'POST',
            headers: {
                'Content-Type': 'multipart/form-data'
            },
            body: form,
        })
        .then(res => res.json())
        .then(json => {
            console.log('res', json);
        }).catch(err => {
            console.error(err);
            return ReE(res, err.message, 500);
        });

})

Но я получаю следующую ошибку

«ошибка»: «недопустимое тело ответа json по причине: неожиданный токен <в JSON в позиции 0» </p>

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 17 мая 2019

Попробуйте res => console.log(res) в своем первом .then() блоке, чтобы увидеть ответ. Обычно эта ошибка «Неожиданный токен <в JSON ...» означает, что ответ вернул некоторый html, а «<» в ошибке является открывающим тегом. </p>

1 голос
/ 03 июля 2019

Тело израсходовано после вызова .json(), но не уверен, что вы сможете получить к нему доступ позже. Простой обходной путь: получить сырое тело и разобрать его самостоятельно:

async function safeParseJSON(response) {
    const body = await response.text();
    try {
        return JSON.parse(body);
    } catch (err) {
        console.error("Error:", err);
        console.error("Response body:", body);
        // throw err;
        return ReE(response, err.message, 500)
    }
}

const json = await = fetch(...).then(safeParseJSON)
...