如何使用nodejs的fsPromise.access()判断文件权限

server/2024/10/20 4:00:31/

同学们可以私信我加入学习群!


正文开始

  • 一种错误示范
  • 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、教程需求,都可以联系博主,博主会视精力更新,免费的羊毛,不薅白不薅!~


http://www.ppmy.cn/server/95411.html

相关文章

基于JAVA的商品供应管理系统-JavaEE

点击下载源码 基于JAVA的商品供应管理系统-JavaEE 摘 要 当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作社会和科学技术发展的三大支柱(材料、能源、信息)之一。信息是管理的基础,是进行决策的基本依…

基于Protobuf的RPC

先上UserServer提供服务的函数要求proto文件内容: syntax"proto3"; package fixbug; option cc_generic_servicestrue; message LoginRequest {bytes name1;bytes pwd2; } message LoginResponse {ResultCode result1;bool sucess2; } #调用远程服务的入…

Python数据库连接全解析:5大方案实战对比

在本文中,我们将通过实际示例,深入探讨Python中5种主流的数据库连接方案。这些例子将帮助您更好地理解每种方法的特点和适用场景。 目录 不同方案说明1. DB-API:以sqlite3为例2. SQLAlchemy:ORM示例3. psycopg2:Postgr…

美团2024年春招第一场笔试[测开方向],编程题+选择题详解,ACM式C++解法

编程题&选择题 编程题小美的平衡矩阵思路代码 小美的数组询问思路代码 验证工号思路代码 选择题1.在计算机网络中,端口号的作用是什么2.HTTPS协议通过使用哪些机制来确保通信的安全性3.Etag用于标识资源的唯一标识符,他可以用于4.在一个单道系统中&a…

深信服day9:文件后缀名和Cookie和前后端地址区别

一、文件后缀名 ISO:镜像文件 RAR:压缩包 html:网页 zip:压缩包 exe:可执行文件 pdf:pdf文档 rm:视频文件 avi:视频文件 tmp:临时文件 mdf:虚拟光驱…

ZeroMQ(二):请求-响应模式,C和C++。

目录 请求响应基础 基本概念 工作流程 典型应用 请求-响应模式的特点 应用实例 优点 缺点 ZEROMQ C语言 2.1 服务器端代码(Reply Server) 2.2 客户端代码(Request Client) 3. 编译代码 4. 详细说明 ZEROMQ C 1. …

鸿蒙媒体开发【相机数据采集保存】拍照和图片

相机数据采集保存 介绍 本示例主要展示了相机的相关功能 接口实现相机的预览拍照功能。 效果预览 使用说明 弹出是否允许“CameraSample”使用相机?点击“允许”弹出是否允许“CameraSample”使用麦克风?点击“允许”进入预览界面,预览正…

【BUG】jinja2.exceptions.TemplateNotFound

这段时间,陆陆续续在做一些开发,记录下,这个该死的bug,把人反反复复折磨了1个小时,最终以一种意想不到的方式解决了它。 任务:设置后端服务器,我创建一个server.py,用于设置 Flask 服…