我正在尝试检查特定文件。文件夹或目录是否可供阅读。我使用了以下发布的代码。代码有效,但我想 知道以下内容:
1-何时会打印错误信息?例如,文件不存在时会打印吗?我尝试了一个不存在的文件,但错误信息是 从未打印过。
2-如何从fs.accessSync()返回一个值?例如,如果文件可以读取,我会返回1,否则返回0。 如代码所示,我试图返回1,但随后控制台打印“未定义”。
请提供问题的答案
码:
const d = fs.accessSync(path, fs.constants.R_OK, (err) => {
if (err) {
console.log('is not readable is readable________________');
}
return 1;
});
console.log(d);
答案 0 :(得分:0)
根据nodejs文档,fs.accessSync不支持回调,你必须使用try catch
try {
fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);
console.log('can read/write');
} catch (err) {
console.error('no access!');
}
答案 1 :(得分:0)
问题在于您尝试使用accessSync
,就像它是异步方法一样。
fs.access
有一个异步方法和一个同步方法:
同步方法 - https://nodejs.org/api/fs.html#fs_fs_accesssync_path_mode
这是您应该使用accessSync
const checkPermissions = file => {
try {
fs.accessSync(file, fs.constants.R_OK);
console.log('can read/write');
return true;
} catch (err) {
console.error('is not readable is readable________________');
return false;
}
};
if (checkPermissions('./some/location/file.pdf')) {
console.log('I have permissions to the file');
} else {
console.error('I do NOT have permissions to the file');
}
异步方法 - https://nodejs.org/api/fs.html#fs_fs_access_path_mode_callback
回调是一种传递给函数的方法,作为稍后要执行的参数。它是node.js的核心部分,我强烈建议阅读它。节点社区已经转向承诺并且现在异步/等待,但是仍然很重要(在我看来)了解回调如何工作以真正理解promises或async / await的新语法。