Nodejs request依赖超时时间该怎么修改

Nodejs request依赖超时时间该怎么修改

看了一些网上的说法,nodejs里http依赖强制超时时间为120秒,现在我用request依赖了,想修改这个超时时间,该怎么修改啊?

5 回复

Node.js request 依赖超时时间修改方法

在使用 request 库时,可以通过配置选项来修改请求的超时时间。虽然 request 库本身没有直接提供超时参数,但可以通过结合其他方法(如 setTimeout 和错误处理)来实现这一功能。

示例代码

const request = require('request');

function makeRequest(url, timeout) {
    return new Promise((resolve, reject) => {
        const req = request(url, (err, res, body) => {
            if (err) {
                reject(err);
            } else {
                resolve({ response: res, body: body });
            }
        });

        // 设置超时时间
        req.on('socket', socket => {
            socket.setTimeout(timeout);

            socket.on('timeout', () => {
                req.abort();
                reject(new Error(`Request timed out after ${timeout / 1000} seconds`));
            });
        });
    });
}

// 使用示例
makeRequest('https://example.com', 5000) // 5秒超时时间
    .then(result => {
        console.log('Request succeeded:', result);
    })
    .catch(error => {
        console.error('Request failed:', error.message);
    });

解释

  1. Promise 封装:我们将 request 请求封装在一个 Promise 中,以便可以更方便地处理异步操作。
  2. socket 超时事件:我们监听 sockettimeout 事件,并在超时时触发错误处理逻辑。
  3. req.abort():如果超时发生,我们调用 req.abort() 来中止请求。
  4. reject:在超时情况下,我们通过 reject 抛出一个错误,从而在外部处理该错误。

这样,你就可以根据需要设置不同的超时时间,而不需要受制于默认的120秒超时限制。


额。。。貌似在option中添加{timeout:毫秒数}就行了…

貌似不行啊,还是会有POST /additem 200 120018ms的提示啊,求助啊

在Node.js中使用request库时,你可以通过配置选项来修改请求的超时时间。request库提供了timeout选项来设置请求的超时时间(以毫秒为单位)。如果你发现默认的超时时间不符合你的需求,可以通过传递timeout参数来调整。

以下是一个示例代码,展示了如何修改请求的超时时间:

const request = require('request');

// 定义一个超时时间为5秒(5000毫秒)
const options = {
    url: 'https://example.com',
    timeout: 5000 // 超时时间设置为5000毫秒
};

request(options, (error, response, body) => {
    if (error && error.code === 'ETIMEDOUT') {
        console.log('请求超时');
    } else if (response && response.statusCode === 200) {
        console.log('请求成功');
        console.log(body);
    } else {
        console.log('请求失败');
    }
});

在这个例子中,我们设置了超时时间为5000毫秒(即5秒),当请求超过这个时间仍未完成时,将会触发超时错误。

解释:

  • options对象包含了请求的URL以及timeout选项。
  • 如果请求超时,error对象将包含一个名为code的属性,其值为'ETIMEDOUT'
  • 如果请求成功,则可以在回调函数中处理返回的响应和响应体。

需要注意的是,request库已经不再维护,并且建议迁移到其他更现代的HTTP客户端库,如axiosnode-fetch。以下是使用axios的示例:

const axios = require('axios');

// 定义一个超时时间为5秒(5000毫秒)
const options = {
    url: 'https://example.com',
    timeout: 5000 // 超时时间设置为5000毫秒
};

axios.get(options.url, { timeout: options.timeout })
    .then(response => {
        console.log('请求成功');
        console.log(response.data);
    })
    .catch(error => {
        if (error.code === 'ECONNABORTED') {
            console.log('请求超时');
        } else {
            console.log('请求失败');
        }
    });

这个示例展示了如何使用axios来设置请求的超时时间,axios的用法与request类似,但更现代化并且得到了更好的支持。

回到顶部