错误捕获策略
- try - catch 块:在可能抛出同步错误的代码周围使用
try - catch
块,例如文件读取(虽然Node.js中文件读取通常是异步,但也有同步版本)。
- Promise的错误处理:对于基于Promise的异步操作,使用
.catch()
方法捕获错误。
- 事件监听:对于一些Node.js内置模块,如
net
模块用于网络连接,通过监听 error
事件来捕获错误。
确保服务可用性的处理方式
- 记录错误:使用日志记录工具(如
winston
)记录错误信息,以便后续分析。
- 优雅降级:在遇到错误时,提供备用方案或默认值,确保服务仍能提供部分功能。
- 重试机制:对于一些临时性错误(如网络连接中断),可以实现重试逻辑。
代码示例
- try - catch 处理同步错误(文件读取同步示例)
const fs = require('fs');
try {
const data = fs.readFileSync('nonexistentfile.txt', 'utf8');
console.log(data);
} catch (err) {
console.error('文件读取失败:', err.message);
// 这里可以添加优雅降级逻辑,比如返回默认数据
}
- Promise 处理异步错误(文件读取异步示例)
const fs = require('fs').promises;
fs.readFile('nonexistentfile.txt', 'utf8')
.then(data => {
console.log(data);
})
.catch(err => {
console.error('文件读取失败:', err.message);
// 同样可以添加优雅降级逻辑
});
- 事件监听处理网络错误(简单的TCP服务器示例)
const net = require('net');
const server = net.createServer((socket) => {
socket.write('欢迎连接!\n');
socket.on('data', (data) => {
socket.write('你发送了: ' + data.toString());
});
});
server.on('error', (err) => {
console.error('服务器错误:', err.message);
// 可以在这里实现重试逻辑,比如重新启动服务器
});
server.listen(8080, '127.0.0.1', () => {
console.log('服务器已启动,监听在 127.0.0.1:8080');
});