Met*_*kin 118 error-handling try-catch node.js
在node.js中,readFile()显示了如何捕获错误,但是没有关于错误处理的readFileSync()函数的注释.因此,如果我在没有文件时尝试使用readFileSync(),我会收到错误Error: ENOENT, no such file or directory.
如何捕获抛出的异常?doco没有说明抛出了什么异常,所以我不知道我需要捕获哪些异常.我应该注意到,我不喜欢通用的'捕获每一个可能的异常'样式的try/catch语句.在这种情况下,我希望捕获文件不存在时发生的特定异常,并尝试执行readFileSync.
请注意,我在启动连接尝试之前只在启动时执行同步功能,因此不需要我不应该使用同步功能的注释:-)
Gol*_*den 187
基本上,fs.readFileSync在找不到文件时会抛出错误.这个错误来自Error原型并抛出使用throw,因此捕获的唯一方法是使用try / catch块:
var fileContents;
try {
fileContents = fs.readFileSync('foo.bar');
} catch (err) {
// Here you get the error when the file was not found,
// but you also get any other error
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,仅通过查看其原型链,您无法检测到抛出了哪个错误:
if (err instanceof Error)
Run Code Online (Sandbox Code Playgroud)
是你能做的最好的,对大多数(如果不是全部)错误都是如此.因此,我建议你去code酒店,检查它的价值:
if (err.code === 'ENOENT') {
console.log('File not found!');
} else {
throw err;
}
Run Code Online (Sandbox Code Playgroud)
这样,您只处理此特定错误并重新抛出所有其他错误.
或者,您也可以访问错误的message属性以验证详细的错误消息,在这种情况下是:
ENOENT, no such file or directory 'foo.bar'
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
Fra*_*cia 19
虽然接受的解决方案没问题,但我找到了一种更好的处理方法.您可以检查文件是否同步存在:
var file = 'info.json';
var content = '';
// Check that the file exists locally
if(!fs.existsSync(file)) {
console.log("File not found");
}
// The file *does* exist
else {
// Read the file and do anything you want
content = fs.readFileSync(this.local, 'utf-8');
}
Run Code Online (Sandbox Code Playgroud)
log*_*yth 11
您必须捕获错误,然后检查它是什么类型的错误.
try {
var data = fs.readFileSync(...)
} catch (err) {
// If the type is not what you want, then just throw the error again.
if (err.code !== 'ENOENT') throw err;
// Handle a file-not-found error
}
Run Code Online (Sandbox Code Playgroud)
对于这些场景,我使用立即调用的 lambda:
const config = (() => {
try {
return JSON.parse(fs.readFileSync('config.json'));
} catch (error) {
return {};
}
})();
Run Code Online (Sandbox Code Playgroud)
async 版本:
const config = await (async () => {
try {
return JSON.parse(await fs.readFileAsync('config.json'));
} catch (error) {
return {};
}
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81411 次 |
| 最近记录: |