【Node.js入门笔记8---fs的一些高级功能】

server/2025/3/19 9:49:28/

Node.js入门笔记8

  • Node.js---fs高级功能
  • 一、fs高级功能
    • 1. fs.chmod():修改文件权限(如 0o755)。
    • 2. fs.chown():修改文件所有者。
    • 3. 使用 fs.promises 下的方法。
    • 4. 用 util.promisify() 转换回调风格的函数。

Node.js—fs高级功能

一、fs高级功能

1. fs.chmod():修改文件权限(如 0o755)。

语法格式:

fs.chmod(path, mode, callback);

参数解读:
path: 必选,文件路径
mode: 必选,文件权限
callback: 必选,回调函数,该方法用于更改文件的权限

const fs = require('fs');fs.chmod('test.txt', 0o755, (err) => {if (err) {console.error('权限修改失败:', err);} else {console.log('权限修改成功');}
});

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\learning\chmod.js

2. fs.chown():修改文件所有者。

语法格式:

fs.chown(path, uid, gid, callback);

参数解读:
path:表示要修改所有权的文件或目录的路径,可以是字符串、Buffer 或者 URL 对象。
uid:新的用户 ID,指定文件或目录的新所有者。
gid:新的组 ID,指定文件或目录的新所属组。
callback:操作完成后调用的回调函数,它接收一个可能出现的错误对象作为参数。

    const fs = require('fs');// 假设要修改的文件路径
const filePath = 'example.txt';
// 假设的新用户 ID
const newUid = 1001;
// 假设的新组 ID
const newGid = 1002;fs.chown(filePath, newUid, newGid, (err) => {if (err) {console.error('修改文件所有权时出错:', err);} else {console.log('文件所有权修改成功');}
});

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\chown.js

3. 使用 fs.promises 下的方法。

fs.promises 是 fs 模块的一个子模块,它提供了基于 Promise 的文件系统操作方法。相比于传统的回调函数方式,使用 Promise 可以让异步代码的编写更加简洁和易于维护,避免了回调地狱的问题。下面为你详细介绍 fs.promises 下一些常用方法的使用。

1. fs.promises.readFile() 用于异步读取文件的全部内容。它返回一个 Promise,当文件读取成功时,Promise 会被 resolve 并返回文件内容;当读取失败时,Promise 会被 reject 并返回错误对象。

  const fs = require('fs/promises');// 读取文件内容并以字符串形式返回
fs.readFile('test.txt', { encoding: 'utf8' }).then(data => {console.log('文件内容:', data);}).catch(err => {console.error('读取文件时出错:', err);});// 或者使用 async/await 语法
async function readFileAsync() {try {const data = await fs.readFile('test.txt', { encoding: 'utf8' });console.log('文件内容:', data);} catch (err) {console.error('读取文件时出错:', err);}
}readFileAsync();

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\promises.js

2. fs.promises.writeFile() 用于异步写入数据到文件 。如果文件不存在,会创建该文件;如果文件已存在,会覆盖原有内容。它返回一个 Promise,当写入成功时,Promise 会被 resolve;当写入失败时,Promise 会被 reject 并返回错误对象。

const fs = require('fs/promises');const data = 'Hello, World!';// 写入数据到文件
fs.writeFile('test.txt', data).then(() => {console.log('数据写入成功');}).catch(err => {console.error('写入数据时出错:', err);});// 或者使用 async/await 语法
async function writeFileAsync() {try {await fs.writeFile('test.txt', data);console.log('数据写入成功');} catch (err) {console.error('写入数据时出错:', err);}
}writeFileAsync();

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\promises.js

fs.promises.appendFile()和fs.promises.unlink()也可以用于异步追加数据到文件和删除文件。与上面两种写法和用法类似,这里就不做详细介绍。

4. 用 util.promisify() 转换回调风格的函数。

util.promisify() 是 Node.js 中 util 模块提供的一个实用工具函数,它的主要作用是将遵循传统回调风格的异步函数转换为返回 Promise 的函数。这有助于我们在代码中更方便地使用现代的 async/await 语法,避免回调地狱问题。下面将从多个方面详细介绍 util.promisify()。

转换 fs.readFile 函数
fs.readFile 是 Node.js 中用于读取文件内容的传统回调风格的异步函数,下面使用 util.promisify() 将其转换为 Promise 风格的函数。

   const fs = require('fs');const util = require('util');// 将 fs.readFile 转换为 Promise 风格的函数
const readFilePromise = util.promisify(fs.readFile);// 使用转换后的函数
readFilePromise('test.txt', 'utf8').then(data => {console.log('文件内容:', data);}).catch(err => {console.error('读取文件时出错:', err);});// 或者使用 async/await 语法
async function readFileAsync() {try {const data = await readFilePromise('test.txt', 'utf8');console.log('文件内容:', data);} catch (err) {console.error('读取文件时出错:', err);}
}readFileAsync();

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\util.js

自定义回调风格函数的转换
下面是一个自定义的回调风格的异步函数,然后使用 util.promisify() 进行转换。

 const util = require('util');// 自定义回调风格的异步函数
function asyncOperation(callback) {setTimeout(() => {const success = true;if (success) {callback(null, '操作成功');} else {callback(new Error('操作失败'), null);}}, 1000);
}// 将自定义函数转换为 Promise 风格的函数
const asyncOperationPromise = util.promisify(asyncOperation);// 使用转换后的函数
asyncOperationPromise().then(result => {console.log(result);}).catch(err => {console.error(err);});// 或者使用 async/await 语法
async function runAsyncOperation() {try {const result = await asyncOperationPromise();console.log(result);} catch (err) {console.error(err);}
}runAsyncOperation();

写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】

node C:\Users\Administrator\Desktop\util.js

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

相关文章

K8s的部署

准备三台虚拟机 作用IP地址操作系统配置关键组件k8s-master01172.16.90.11Rocky Linux release 92颗CPU 4G内存 50G硬盘kube-apiserver, etcd, etck8s-node01172.16.90.12Rocky Linux release 92颗CPU 4G内存 50G硬盘kubelet, kube-proxyk8s-node02172.16.90.13Rocky Linux re…

CSS Sprite (精灵图/雪碧图)

CSS Sprite 目录应用场景1.网页性能优化2.用户交互场景 代码实现1.目录结构2.练习图片地址3.代码 目录 应用场景 1.网页性能优化 减少 HTTP 请求:在传统的网页中,如果有多个小图标或小图片,浏览器需要为每个图片单独发起一个 HTTP 请求。这…

Tomcat新手入门指南:从零开始安装与基本配置

Tomcat新手入门指南:从零开始安装与基本配置 Tomcat 是一个广泛使用的Java servlet容器,用于运行Web应用服务器。它将JavaBean转换为Servlet,并作为JVM的一个虚拟进程运行。以下是一步一步的教程,帮助您快速安装和配置Tomcat。 …

【Spring】第四弹:基于XML文件注入Bean对象

一、setter 注入Bean对象 1.创建Student对象 public class Student {private Integer id;private String name;private Integer age;private String sex;public Student() {}public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String …

Linux主机持久化技术

1.SSH软连接后门 SSH服务允许通过PAM进行认证,关键文件:sshd_config;确保UserPAM的值为YES 我们可以看一下/etc/ssh/sshd_config的配置,ssh是客户端配置,sshd是服务端配置 如上可以知道这个是允许PAM认证的 在linux中存在模块pam…

计算机视觉算法实战——实例分割(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​ ​​​​​​ ​ ​ 1. 引言 1.1 实例分割领域简介 实例分割(Instance Segmentation)是计算机视觉领域的一个…

计算机视觉——深入理解卷积神经网络与使用卷积神经网络创建图像分类算法

引言 卷积神经网络(Convolutional Neural Networks,简称 CNNs)是一种深度学习架构,专门用于处理具有网格结构的数据,如图像、视频等。它们在计算机视觉领域取得了巨大成功,成为图像分类、目标检测、图像分…

春秋云境刷题1

CVE-2022-29464 靶标介绍: WSO2文件上传漏洞(CVE-2022-29464)是Orange Tsai发现的WSO2上的严重漏洞。该漏洞是一种未经身份验证的无限制任意文件上传,允许未经身份验证的攻击者通过上传恶意JSP文件在WSO2服务器上获得RCE。 Git…