#javascript #node.js #fetch
Вопрос:
Я новичок в кодировании node-fetch
, использую и пытаюсь проверить, является ли ответ json
«или text
«, но я получаю сообщение об ошибке, если ответ является текстовым.
Если ответ будет json, он будет работать нормально, но если ответ будет текстовым, я получу сообщение об ошибке.
Ошибка, которую я получаю:
invalid json response body at https://url.com/api reason: Unexpected token i in JSON at position 6
Мой код:
const fetch = require("node-fetch");
const doFetch = async (url) => {
try {
let res = await fetch(url);
try {
return res.json();
} catch (error) {
return res.text();
}
} catch (error) {
console.log('fetch error', error.message);
}
}
Комментарии:
1. Вы получаете ошибку, потому что вы поместили ее в блок блокировки. Не будете ли вы немного более ясны в своем вопросе? И напишите код правильно. Какой URL вы используете? и откуда?
Ответ №1:
Вы можете проверить, какой тип контента указан в заголовке:
const contentType = response.headers.get("content-type");
если это "application/json"
так, то используйте этот json()
метод. иначе , если это так "text/plain"
, используйте этот text()
метод.
Комментарии:
1. Есть и другие, верно?
text/plain
для текста()2. Спасибо, я действительно ценю вашу помощь.
3. С удовольствием, мой друг (:
Ответ №2:
Прежде всего: задайте правильный вопрос
Ошибка возникает из-за того, что вы пытаетесь прочитать содержимое ответа в формате JSON, и, по-видимому, это неверная строка в формате JSON.
В этом случае попробуйте использовать ответ, прежде чем запрашивать преобразование содержимого в объект JSON. Вы должны быть в состоянии прочитать код состояния ответа или распечатать исходное содержимое.
Таким образом, правильный вопрос не «Как я могу знать, что получаю текст или JSON?», потому что вы должны сказать серверу/API, что запрашиваете то, что хотите.
Правильный вопрос может звучать так: «Если ответ не содержит допустимого JSON, что это такое?».
Моя теория
Я предположил, что вы отправляете запрос в https://url.com/api URL. Для целевой конечной точки может потребоваться параметр (URL-адрес для сокращения), который отсутствует.
Если вы распечатаете исходное содержимое ответа, вы увидите сообщение, содержащее слово «недопустимо». Именно по этой причине в нем написано «Неожиданный токен i в JSON в позиции 6″.
Лично я бы использовал код состояния ответа, чтобы определить, получил ли я сообщение об ошибке (не в JSON) или запрошенное содержимое (в JSON).
Поздравляю!
Вы новичок в кодировании, и вы уже обработали все виды ошибок, которые может вызвать небольшой фрагмент кода в вашем приложении. Вы на правильном пути. Так держать!