我在捕捉模块fs的writeFile错误时遇到了问题。
我试图尝试/捕获捕获错误并写入日志,但是它不起作用。 在调试器错误中,请勿继续执行catch块,并且在调用过多次之后,没有任何快乐。
const fs = require('fs');
const writeData = (body) => {
try{
const stringData = JSON.stringify(body);
fs.writeFile('./data76/data.json', stringData, {flag: 'a+'} ,(err) =>{
if(!err){
console.log('file was writed');
}else {
console.error('Error writing new data');
throw new Error(err);
}
});
}catch(error){
console.error('THIS ERROR!!!!!');
let dataError = JSON.stringify(error);
fs.open('./logs/error.log', 'wx', (err, fd) => {
if(!err){
fs.writeFile(fd, dataError, (err) => {
if(!err){
fs.close(fd, (err) => {
if(!err){
console.log('log was written success');
}else{
console.error('file log wasn\'t closed');
}
});
}else{
console.error('log wasn\'t writed');
}
});
}else {
fs.writeFile(fd, dataError, (err) => {
if(!err){
console.log('log was writed');
}else {
console.error('log wasn\'t writed');
}
});
}
});
};
};
const body = {
"name": {
"first": "John",
"jobtitle": "Driver"
},
"uuid_company": "ab667468-d7c5-469e-b402-0bd2d71073fa",
"license_number": "AB58659",
"phone": "+19019876512",
"uuid": "08475753",
"place_id": "place_not_matter",
"birthday": "10.12.1967"
};
writeData(body);
结果,我等待catch错误并将其写入文件中。 我的个人记录器
答案 0 :(得分:1)
try/catch
无法捕获异步回调内部引发的错误。因此,如果您要在fs.writeFile()
的回调中处理错误,则需要在fs.writeFile()
回调中插入错误处理代码,或者(最好)使用文件处理的Promise版本并让错误通过承诺传播。
此外,大多数写入文件的错误不是暂时性错误。因此,很少尝试再次写入实际上是一种解决方案,而不仅仅是遇到相同的问题。更典型的错误是磁盘已满,媒体错误,卷不响应等。这些错误不太可能通过再次尝试而突然工作。同样,每种特定类型的错误可能需要不同的策略来处理。您是否想针对特定类型的错误制定策略?
此外,fs.writeFile()
将直接采用文件路径,然后它将为您处理fs.open()
和fs.close()
。您无需手动打开,写入并关闭它。