#node.js #module #request
#node.js #модуль #запрос
Вопрос:
Я использую хорошо известный модуль запроса (https://github.com/request/request ), который запрашивает некоторую страницу, а затем я произвел некоторые вычисления и построил код ответа для пользователя.
Дело в том, что иногда я получаю правильный код (200), но данные (какая-то мера безопасности?) Отправляются ВЕЧНО — запрос не останавливается. Как я могу отключить его после некоторого времени «бездействия»?
var requestOptions =
{
url : url,
timeout : 10000, //// here we set the request timeout - 10 seconds
headers : {'we can also set some headers' : 'sometimes the pages require a headers - there is no proper responce without those'}
};
var ourRequest = request(requestOptions, function(err, resp, body)
{
if (err || resp.statusCode >= 400) // OR just - (err || resp.statusCode !== 200)
{
console.log(err.connect);
if (resp)
{
console.log('ERROR at last there is response (code: ' resp.statusCode ')n');
}
else
{
if ((err.code === 'ETIMEDOUT') amp;amp; (err.connect === true))
{
//// when there's a timeout and connect is true, we're meeting the conditions described for the timeout option where the OS governs
console.log('REQUEST TIMEOUT - SYSTEM FAULT!');
}
else if ((err.code === 'ESOCKETTIMEDOUT') || (err.code === 'ETIMEDOUT'))
{
console.log('REQUEST TIMEOUT - NODE EXPRESS/REQUEST FAULT!');
}
console.log('ERROR you cant ge the body of the page...');
}
}
if (resp.statusCode >= 300 amp;amp; resp.statusCode < 400)
{
console.log('page REDIRECT');
}
if (!err amp;amp; resp.statusCode == 200)
{
console.log('ok, we get the body, lets do something with it');
console.log('some async code example to send part of the data to other servers, etc.');
}
});
Это внутренний сервер, с которого я получаю данные — иногда онлайн, а иногда и полностью автономно, поэтому я обнаруживаю, что некоторые страницы имеют схожие «функциональные возможности», например, validator. В качестве URL-адреса настройте какую-нибудь страницу и добавьте « https://validator.w3.org/nu/?doc=
перед ней, сделайте несколько запросов, чтобы увидеть, что иногда он зависает, и тайм-аут не работает на них (вероятно, вызывает получение правильного кода состояния).
Как я могу завершить запрос через 10 секунд, даже если он получит правильный код состояния? Спасибо за любые мысли по этому вопросу.
Ответ №1:
попробуйте это:
соответственно.request.abort();