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

Node.js入门笔记8

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

Node.js---fs高级功能

一、fs高级功能

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

语法格式:

bash 复制代码
fs.chmod(path, mode, callback);

参数解读:

path: 必选,文件路径

mode: 必选,文件权限

callback: 必选,回调函数,该方法用于更改文件的权限

javascript 复制代码
const fs = require('fs');

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

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

bash 复制代码
node C:\Users\Administrator\Desktop\learning\chmod.js

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

语法格式:

javascript 复制代码
fs.chown(path, uid, gid, callback);

参数解读:

path:表示要修改所有权的文件或目录的路径,可以是字符串、Buffer 或者 URL 对象。

uid:新的用户 ID,指定文件或目录的新所有者。

gid:新的组 ID,指定文件或目录的新所属组。

callback:操作完成后调用的回调函数,它接收一个可能出现的错误对象作为参数。

javascript 复制代码
    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文件的路径】

bash 复制代码
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 并返回错误对象。

javascript 复制代码
  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文件的路径】

bash 复制代码
node C:\Users\Administrator\Desktop\promises.js

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

javascript 复制代码
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文件的路径】

bash 复制代码
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 风格的函数。

javascript 复制代码
   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文件的路径】

bash 复制代码
node C:\Users\Administrator\Desktop\util.js

自定义回调风格函数的转换

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

javascript 复制代码
 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文件的路径】

bash 复制代码
node C:\Users\Administrator\Desktop\util.js
相关推荐
千寻xun9 小时前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
Piko61415 小时前
锐捷 VSU 虚拟化堆叠配置
运维·网络·笔记
AOwhisky15 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环
Piko61417 小时前
锐捷交换机 DHCP Server部署
运维·网络·笔记
取地址符17 小时前
Rust学习笔记(基于Rustlings)(2):数据结构与集合
笔记·学习·rust
先吃饱再说18 小时前
从“地狱”到“楼梯”再到“同步写法”:Node.js 异步的二十年与Node内置fs模块详解
node.js
知识收割者18 小时前
Nodejs也能写Agent - 10.LangChain篇 - 初识LangChain
node.js
A.零点18 小时前
期末复习,408考研数据结构:第一章绪论完整知识梳理与真题深度解读
c语言·数据结构·笔记·考研
EQ-雪梨蛋花汤18 小时前
【Unity笔记】VR 一体机画面锯齿、模型边缘闪烁、接缝抖动排查:MSAA、Mipmap、Render Scale、Z-Fighting 全流程记录
笔记·unity·vr
茯苓gao18 小时前
嵌入式开发笔记:工业机器人通信协议深度解析——从现场总线到工业以太网
笔记·嵌入式硬件·学习·机器人·信息与通信