在Node.js中,處理連接超時通常涉及到以下幾個方面:
例如,對于HTTP請求,可以使用http.request()方法的timeout選項設置超時時間:
const http = require('http');
const options = {
hostname: 'example.com',
port: 80,
path: '/',
method: 'GET',
timeout: 5000 // 設置超時時間為5秒
};
const req = http.request(options, (res) => {
// 處理響應
});
req.on('timeout', () => {
req.abort(); // 超時后中止請求
console.error('請求超時');
});
req.on('error', (e) => {
console.error(`請求遇到問題: ${e.message}`);
});
req.end();
try-catch語句捕獲異常,并在catch塊中處理超時錯誤。async function fetchData() {
try {
const response = await fetch('https://example.com/data', { timeout: 5000 });
const data = await response.json();
// 處理數據
} catch (error) {
if (error.name === 'AbortError') {
console.error('請求超時');
} else {
console.error(`請求遇到問題: ${error.message}`);
}
}
}
fetchData();
const axios = require('axios');
async function fetchDataWithRetry(url, retries = 3, backoffFactor = 2) {
try {
const response = await axios.get(url, { timeout: 5000 });
return response.data;
} catch (error) {
if (retries > 0 && error.code === 'ECONNABORTED') {
console.error('請求超時,正在重試...');
await new Promise((resolve) => setTimeout(resolve, backoffFactor * 1000));
return fetchDataWithRetry(url, retries - 1, backoffFactor);
} else {
console.error(`請求遇到問題: ${error.message}`);
}
}
}
fetchDataWithRetry('https://example.com/data');
可以使用第三方監控工具,如New Relic、Datadog等,或使用開源解決方案,如Prometheus和Grafana。