📜  Node.js fsPromises.access() 方法

📅  最后修改于: 2022-05-13 01:56:54.284000             🧑  作者: Mango

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_OKfs.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()检查文件的可访问性。这样做会引入竞争条件,因为其他进程可能会在两次调用之间更改文件的状态。相反,用户代码应该直接打开/读取/写入文件并处理文件不可访问时引发的错误。