当前位置: 首页 > news >正文

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

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


正文开始

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • git 常用指令(创建分支、提交分支、解决冲突)
  • [设备] 关于手机设备中几种传感器的研究
  • float32转float16、snorm/sunorm8/16 学习及实现
  • 浅析DNS服务器:办公网DNS的架构思路分享
  • 深度学习6--深度神经网络
  • 【政策分享】最全!2023-2024年国家遥感政策汇总
  • 华为OD机试(C卷,200分)- 可以组成网络的服务器
  • Sparksql array相关函数
  • gin-vue-admin框架遇到AxiosError:Network Error怎么解决?
  • redis--分布式锁(1)
  • Python(模块---pandas+matplotlib+pyecharts)
  • Apache OFBiz 曝出严重漏洞,允许预身份验证 RCE
  • 第一篇Linux介绍
  • 如何调整 PDF 文件大小
  • 【OpenCV C++20 学习笔记】拉普拉斯(Laplace)二阶求导-边缘检测
  • ➹使用webpack配置多页面应用(MPA)
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Docker 笔记(2):Dockerfile
  • es6要点
  • Java小白进阶笔记(3)-初级面向对象
  • jQuery(一)
  • JS题目及答案整理
  • Spring Cloud Feign的两种使用姿势
  • Sublime text 3 3103 注册码
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 大快搜索数据爬虫技术实例安装教学篇
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 离散点最小(凸)包围边界查找
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 微信小程序--------语音识别(前端自己也能玩)
  • 无服务器化是企业 IT 架构的未来吗?
  • 优秀架构师必须掌握的架构思维
  • Spring Batch JSON 支持
  • 阿里云API、SDK和CLI应用实践方案
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # Kafka_深入探秘者(2):kafka 生产者
  • # 安徽锐锋科技IDMS系统简介
  • #DBA杂记1
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $.proxy和$.extend
  • (07)Hive——窗口函数详解
  • (3)选择元素——(17)练习(Exercises)
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)模仿学习-Action数据的模仿
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (顺序)容器的好伴侣 --- 容器适配器
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (推荐)叮当——中文语音对话机器人
  • (译)2019年前端性能优化清单 — 下篇
  • (原創) 系統分析和系統設計有什麼差別? (OO)