Node.js fsPromises.access() 方法
fsPromises.access()方法用于测试path指定的给定文件或目录的权限。可以使用文件访问常量将要检查的权限指定为参数。也可以通过使用按位 OR运算符创建具有多个文件常量的掩码来检查多个文件权限。
如果可访问性检查成功,则Promise被解析,没有任何值。如果任何可访问性检查失败, Promise会被 Error 对象拒绝。
句法:
fsPromises.access( path, mode )
参数:此方法接受上面提到的两个参数,如下所述:
- path:它是一个String,Buffer或URL,表示必须对其进行权限测试的文件或目录的路径。
- mode:它是一个整数值,表示要测试的权限。逻辑 OR运算符可用于分隔多个权限。它可以具有fs.constants.F_OK、fs.constants.R_OK、fs.constants.W_OK和fs.constants.X_OK的值。它是一个可选参数。默认值为fs.constants.F_OK 。
返回值:它返回Promise。
例1:本例展示了对文件的写权限的测试。
// Node.js program to demonstrate the
// fsPromises.access() method
// Import the filesystem module
const fs = require('fs');
const fsPromises = fs.promises;
// Allowing only read permission
fs.chmodSync("example_file.txt", fs.constants.R_OK);
// Testing the write permission
fsPromises.access('example_file.txt', fs.constants.W_OK)
.then(() => console.log('Can be accessed'))
.catch(() => console.error('Can not be accessed'));
输出:
Can not be accessed
例2:这个例子是测试一个文件的读写权限。
// Node.js program to demonstrate the
// fsPromises.access() method
// Import the filesystem module
const fs = require('fs');
const fsPromises = fs.promises;
// Allowing only read permission
console.log("Giving only read permission to the user");
fs.chmodSync("example_file.txt", fs.constants.R_OK);
// Test the read permission
fsPromises.access('example_file.txt', fs.constants.R_OK)
.then(() => console.log('Can be accessed'))
.catch(() => console.error('Can not be accessed'));
// Test both the read and write permissions
fsPromises.access('example_file.txt',
fs.constants.R_OK | fs.constants.W_OK)
.then(() => console.log('Can be accessed'))
.catch(() => console.error('Can not be accessed'));
输出:
Giving only read permission to the user
Can be accessed
Can not be accessed
不建议在调用fsPromises.open()之前使用fsPromises.access()检查文件的可访问性。这样做会引入竞争条件,因为其他进程可能会在两次调用之间更改文件的状态。相反,用户代码应该直接打开/读取/写入文件并处理文件不可访问时引发的错误。