如何使用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、教程需求,都可以联系博主,博主会视精力更新,免费的羊毛,不薅白不薅!~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/391944.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模评价类—Topsis法

目录 文章目录 前言 切记:以下内容仅用于参考理解,不可用于数模竞赛!!! 一、Topsis的基本原理 二、Topsis的建模过程 1.判断矩阵是否需要正向化 2.原始矩阵正向化 3.矩阵标准化 4.计算距离,给出得…

FPGA的工作本科可以做吗?

在FPGA行业中,这样的偏见一直存在。 很多人认为,只有985、211的硕士才有资格涉足这一领域,甚至有人表示,即使是9、2本硕也难以找到工作,本科生就不要想了。 难到真的只有985,211的研究生才能有机会入行FPG…

安卓常用控件ListView

文章目录 ListView的常用属性ListView的常用APIListView的简单使用 ListView是一个列表样式的 ViewGroup,将若干 item 按行排列。它是一个很基本的控件也是 Android 中最重要的控件之一。它可以实现多个 View 的垂直排列并支持滚动显示效果。 ListView的常用属性 常…

农场游戏中的时间管理实例

一、准备工作 在Unity中创建承载日期和时间的文本 二、设置游戏的时间戳 using System.Collections; using System.Collections.Generic; using UnityEngine; //标识这个类可以被序列化 [System.Serializable] public class GameTimestamp {// 游戏时间戳的成员变量public in…

鸿蒙next 评分组件来了 我不允许你不会

前言导读 各位同学大家,有段时间没有跟大家见面了,因为最近一直在更新鸿蒙的那个实战课程所以就没有去更新文章实在是不好意思, 所以今天就给大家更新一期实战案例 评分组件 希望帮助到各位同学工作和学习 效果图 接口 Rating(options?: { rating: number, indicator?:…

48天笔试训练错题——day40

目录 选择题 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编程题 1. 发邮件 2. 最长上升子序列 选择题 1. DNS 劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回…

开关电源之电压的影响因素和指标

开关电源并不是一个简单的小盒子,它相当于有源器件的心脏,不断地为元件提供能量。电源质量的好坏直接影响到元器件的性能。开关电源的设计、制造和质量管理需要精密的电子仪器来模拟电源的实际工作特性(即各种规格),经…

docker、k8s部署 mysql group replication 和 ProxySQL 读写分离

MySQL Group Replication(简称MGR)是MySQL官方推出的一个高可用与高扩展的解决方案。MySQL组复制它提供了高可用、高扩展、高可靠的MySQL集群服务,这里部署的 mysql 版本 5.7.33,架构是一读一写。特别要注意一个关键点: 必须保证各…

Go语言加Vue3零基础入门全栈班10 Go语言+gRPC用户微服务项目实战 2024年07月31日 课程笔记

概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…

【数据结构算法经典题目刨析(c语言)】反转链表(图文详解)

💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 目录 一、题目描述 二、思路分析 三、代码实现 一、题目描述: 二、思路分析 : 通过三个指针n1,n2,n3来实现链表的反转 1.首先初始化 n1为…

指针函数和函数指针

文章目录 🍊自我介绍🍊指针函数🍊指针函数回调函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello,大家好,我是小珑也要…

谷粒商城实战笔记-128-商城业务-商品上架-sku在es中存储模型分析-关键

文章目录 一,Elasticsearch在谷粒商城中的应用1,商城的商品检索2,日志检索 二,谷粒商城ES的商品索引mapping如何设计1,商品索引product的mapping冗余 SPU 信息的原因第一种方案的优缺点:优点:缺…

苍穹外面day13(day10)---订单状态定时处理、来单提醒和客户催单

Spring Task 同学们可以看我这篇文章 Spring Task初学-CSDN博客 订单状态定时处理 新建OrderTask /*** 定时任务类,定时处理订单状态*/ Component Slf4j public class OrderTask {Autowiredprivate OrderMapper orderMapper;/*** 处理超时订单的方法*/Scheduled(c…

SQL数据库备份

转载:数据库备份与还原 1. 以下过程为记录客户单位备份过程。 一般有E盘选择E盘备份,否则选择D盘备份。选中备份文件需要重命名,以防原文件被覆盖。切换选项,选中压缩备份。

网络安全入门教程(非常详细)从零基础入门到精通!

一、引言 在当今高度数字化的时代,网络如同一张无形的大网,将世界紧密连接在一起。然而,在这看似便捷与美好的背后,却隐藏着无数的风险与威胁。网络安全已成为捍卫个人隐私、企业机密乃至国家安全的关键防线。如果您怀揣着对网络世…

VSCode上安装C#环境教程

本章教程,教你如何在vscode上,可以快速运行一些基础的c#代码。 1、下载 .NET Code SDK 下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/sdk-for-vs-code?utm_source=vs-code&utm_medium=referral&utm_campaign=sdk-install 根据自己的操作系统,选择…

Java_微服务

首先介绍一下单体架构与微服务架构: 单体架构: 微服务: SpringCloud: 版本: 标黑部分为目前企业使用最多的版本,因为它支持jdk8、jdk11,下面使用SpringCloud也会使用这个版本。 服务拆分&…

【GLM-4开发实战】Function Call进阶实战:外部函数调用回顾

系列篇章💥 No.文章1【GLM-4开发实战】Function Call进阶实战:外部函数调用回顾2【GLM-4开发实战】Function Call进阶实战:常见挑战之意图识别处理3【GLM-4开发实战】Function Call进阶实战:常见挑战之海量函数处理4【GLM-4开发实…

黑马头条vue2.0项目实战(五)——首页—频道编辑

目录 1. 使用页面弹出层 1.1 页面弹出层简单使用 1.2 创建频道编辑组件 1.3 页面布局 2. 展示我的频道 3. 展示推荐频道列表 3.1 获取所有频道 3.2 处理展示推荐频道 4. 添加频道 5. 编辑频道 5.1 处理编辑状态 5.2 切换频道 5.3 让激活频道高亮 5.4 删除频道 6.…

基于RK3588+AI支持能源在线监测系统应用的AIOT产品方案

支持能源在线监测系统应用的AIOT产品方案 近年来,智慧能源行业受益于国家政策扶持、市场需求拉动和先进技术支撑呈现出了蓬勃发展态势。助推智慧能源发展,打造了支持能源在线监测系统应用的AIOT产品方案。 能源在线监测系统的市场潜力 随着社会经济的飞…