Try-Catch не обрабатывает ошибки с помощью запроса https.get в узле - PullRequest
0 голосов
/ 03 июля 2019

У меня есть запрос https.get в Node, для которого мне нужно обработать ошибки - предпочтительно в блоке try-catch. Например, когда URL неверен

Я попытался обернуть блок https.get в попытку try, и я попытался обработать с помощью res.on ('error'). Кажется, что в обоих случаях ошибка не достигает блока обработки ошибок.

const https = require('https');

const hitApi = () => {

    const options = {
        "hostname": "api.kanye.rest"
    };

    try {
        https.get(options, res => {

            let body = '';


            res.on('data', data => {
                body += data;
            });

            res.on('end', () => {
                body = JSON.parse(body);
                console.dir(body);
            });

        });

    } catch (error) {
        throw error;
    }
}

hitApi();

Если я изменю URL на несуществующий API (например, api.kaye.rest), я ожидаю увидеть обработанный ответ e.rror. Вместо этого я вижу «Событие необработанной ошибки»

1 Ответ

0 голосов
/ 03 июля 2019

Причина попытки try ... catch .. fails заключается в том, что он предназначен для обработки синхронных ошибок.https.get() равно асинхронно и не может быть обработано с помощью обычного try..catch ..

Используйте req.on('error',function(e){}); для обработки ошибки.Вот так:

var https = require('https');

var options = {
  hostname: 'encrypted.google.com',
  port: 443,
  path: '/',
  method: 'GET'
};

var req = https.request(options, function(res) {
  console.log("statusCode: ", res.statusCode);
  console.log("headers: ", res.headers);

  res.on('data', function(d) {
    process.stdout.write(d);
  });
});
req.end();
// Error handled here.
req.on('error', function(e) {
  console.error(e);
});

Подробнее об этом вы можете прочитать в документации по здесь

...