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);
});
解释
- Promise 封装:我们将
request
请求封装在一个 Promise 中,以便可以更方便地处理异步操作。 - socket 超时事件:我们监听
socket
的timeout
事件,并在超时时触发错误处理逻辑。 - req.abort():如果超时发生,我们调用
req.abort()
来中止请求。 - reject:在超时情况下,我们通过
reject
抛出一个错误,从而在外部处理该错误。
这样,你就可以根据需要设置不同的超时时间,而不需要受制于默认的120秒超时限制。
额。。。貌似在option中添加{timeout:毫秒数}
就行了…
貌似不行啊,还是会有POST /additem 200 120018ms
的提示啊,求助啊
RTFSC!
在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客户端库,如axios
或node-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
类似,但更现代化并且得到了更好的支持。