У меня возникли некоторые проблемы с пакетом npm request
, и я заставил его правильно вызывать любой URL-адрес, если он не относится к выключенному серверу.Например, я не могу вызвать amazon.com
, но я могу вызвать dev.personalDomain.com
, который указывает на полностью отключенный экземпляр EC2.
Я попытался вырезать логику приложения, чтобы сделать так, чтобы просто ошибка
Для этого примера предположим, что monitor.body.url = 'amazon.com'
является строкой
Мой код
request({url: `http://${monitor.body.url}`, timeout: 20}, function (error, response, body) {
console.log(`Response: ${response}`);
console.log(`Body: ${body}`);
console.log(`Error: ${error}`);
if(error == 'ENOTFOUND' || error == 'ETIMEDOUT') {
response.statusCode = 500;
}
if(error || response.statusCode < 200 && response.statusCode > 299 || !response.statusCode) {
if(!response || !response.statusCode) response.statusCode = 500;
// Application logic
}
// If nothing went wrong just console.log -- This is used for debugging not useful in prod
if(!error || response.statusCode > 299 || response.statusCode < 200)console.log(`Successfully called ${monitor.body.url}`);
});
Сообщение об ошибке
Response: undefined
Body: undefined
Error: Error: ESOCKETTIMEDOUT
/home/ec2-user/environment/service/app.js:91
if(!response || !response.statusCode) response.statusCode = 500;
^
TypeError: Cannot set property 'statusCode' of undefined
Я посмотрел на Google / SO и обнаружил, что это может быть DNS, вызывающий проблему, и для тестирования / решения, которое я использую:
const dns = require("dns");
dns.setServers(['8.8.8.8', '1.1.1.1']);
Это не изменилорезультат запроса сверху.
У кого-нибудь есть предложение или идея о том, что это может быть?Мне не повезло найти пример, который близок и выдает то же сообщение об ошибке.
РЕДАКТИРОВАТЬ **
Мой DNS отлично работает на моей машине, так что проблем там нет.Кроме того, у меня не было этой проблемы, когда у меня было только request({'http://${monitor.body.url}', function (error, response, body) {
, так что похоже на ошибку с тем, как я использую запрос