GET-запрос Node.js иногда получает HTML-документ вместо JSON и вылетает - PullRequest
0 голосов
/ 30 мая 2018

Я использую node.js (и discord.js) для создания диска разногласий.

Я использую запрос GET с модулем запроса npm.Код работает, как и ожидалось, когда пользователь вводит "! Cat", он получает данные из https://aws.random.cat/meow и публикует картинку кота ОДНАКО иногда сервер выдаст ошибку 403, которая приводит к HTML-странице вместо JSON и вылетает из-за бота из-зана неожиданный токен.

Я ищу способ обнаружить HTML-страницу и остановить код / ​​опубликовать сообщение об ошибке, либо обнаружив, что конечной точкой является HTML вместо JSON, либо содержимое данных, отправленных обратноэто будет:

  • JSON = { file: 'https://catlink.jpg' }
  • HTML 403 = <!DOCTYPE HTML PUBLIC...

IMG1: Ошибка - ответ HTML-страницы, IMG2: ожидаемые ответы 1 на запрос

Мой текущий кодовый блок выглядит следующим образом:

//RANDOM CATS
if(command === "cat" || command === "meow"){
//Connection options
var catoptions = {
  url: "https://aws.random.cat/meow",
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application.json'
  }
};`

//Send the request
let request = require("request");
request(catoptions, function(err, response, body){
  if(err){
    console.log("error code #002");
  } else {
    //Receive the body of the JSON
    var catresult = JSON.stringify(body); //stringify incase page returns HTML 403 error - Will recieve "<!DOCTYPE HTML PUBLIC..." as first bit of data
    console.log(catresult) //Send to log to see if JSON "cat pic" data is returned or the HTML 403 error
    let meowdata = JSON.parse(body);

    //Responbse body
    let meowpic = meowdata.file;
    console.log(meowpic); //Send link to console
    message.channel.send(meowpic); //Send link to discord channel with discord.js
  }
});
} //END OF RANDOM CATS

1 Ответ

0 голосов
/ 30 мая 2018

JSON.parse выдает, если передан недопустимый JSON, а HTML является недопустимым JSON, необходимо перехватить исключение, чтобы избежать сбоя.

Из документов :

Выдает исключение SyntaxError, если строка для анализа недопустима JSON.

request(catoptions, function(err, response, body) {
    if (err) {
        console.log("error code #002");
    } else {

        try {
            //Receive the body of the JSON
            let catresult = JSON.stringify(body); //stringify incase page returns HTML 403 error - Will recieve "<!DOCTYPE HTML PUBLIC..." as first bit of data
            console.log(catresult) //Send to log to see if JSON "cat pic" data is returned or the HTML 403 error
            let meowdata = JSON.parse(body);

            //Responbse body
            let meowpic = meowdata.file;
            console.log(meowpic); //Send link to console
            message.channel.send(meowpic); //Send link to discord channel with discord.js

        } catch (e) {
            console.error(e);
        }
    }
});
...