Модуль запроса Nodejs — как я могу отменить запрос?

#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();