nodejs — проверьте, является ли ответ на выборку json или текстом

#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).

Поздравляю!

Вы новичок в кодировании, и вы уже обработали все виды ошибок, которые может вызвать небольшой фрагмент кода в вашем приложении. Вы на правильном пути. Так держать!