同学们可以私信我加入学习群!
正文开始
- 一种错误示范
- fsPromise.access正确的书写
- 总结
一种错误示范
我们操作文件的时候,经常需要提前判断文件的状态:文件是否存在、文件是否可读、文件是否可写。
查看官网介绍后,按照我们平时的习惯,写个小demo:
const copyPropertiesPathExist = await fsPromise.access(copyPropertiesPath, fs.constants.F_OK); //检测路径是否存在const access1 = await fsPromise.access(copyPropertiesPath,fs.constants.W_OK | fs.constants.R_OK); //检测读写权限const access2 = await fsPromise.access(copyPropertiesPath,fs.constants.W_OK); //检测写权限const access3 = await fsPromise.access(copyPropertiesPath,fs.constants.R_OK); //检测读权限console.log('copyPropertiesPathExist',copyPropertiesPathExist)console.log('11111111111',access1)console.log('111111111112',access2)console.log('111111111113',access3)
这个demo的关键代码只有四行,对应四种参数组合:
- fs.constants.F_OK:检测文件是否存在
- fs.constants.W_OK | fs.constants.R_OK:检测文件是否同时具备读和写权限
- fs.constants.W_OK:检测文件是否具备写权限
- fs.constants.R_OK:检测文件是否具备读权限
当文件符合上面所有的权限时,会发现copyPropertiesPathExist 、access1 、access2 、access3等四个变量都是undefined。而如果文件不符合其中的某个权限,则会直接在控制台报错。这显然不是我们想要的效果。
fsPromise.access正确的书写
查看官网(node版本v22),我们可以发现有两个关键的信息:
- 成功时,返回值是undefined,所以将返回结果赋值给变量毫无意义。
- 官网示例代码中,并没有赋值给变量,而是使用try catch抛出异常。
所以我们的代码参照官网,应该修改为:
上面的图片是项目中的代码,在try catch中捕获异常,并在发现异常时,抛出读写权限不足的异常信息。
catch之后的代码就是后续的业务代码。
为什么try catch不把所有的代码都包含?
因为后续有其他不相关的业务代码,如果try中把后续业务代码也包含,那么就无法确定当catch到异常时,究竟是文件权限不足,还是文件流出错,或者压缩jar包文件出错。
总结
大家如果需要联系博主,或者获取博主各系列文章对应的资源,可以通过私信博主来获取。
本文虽然简单,但是涉及到的api比较偏,网络资料较少,所以在此记录一下,帮助对node官网不熟悉的同学,更容易理解api的使用。
有任何前端项目、demo、教程需求,都可以联系博主,博主会视精力更新,免费的羊毛,不薅白不薅!~