Node.js中fs模块实现配置文件的读写

news/2024/9/23 10:30:21/

Node.js中fs模块实现配置文件的读写

    • 准备工作
    • 读取配置

在Node.js中, fs模块提供了对文件系统的访问功能,我们可以利用它来实现配置文件的读取和写入操作。正好用到,就记录一下。

准备工作

确保你的项目目录已经安装了做了npmpnpmyarn等node相关初始化,存在node_modules文件夹,这样就可以使用fs

const fs = require('fs');

接下来就是定义路径,我是用到年月来定义路径,并放在当前路径的storeConfigs下:

const path = require('path');
const date = getDate();// 文件夹路径 ./storeConfigs/${date.year}/${date.month}
const folderPath = path.resolve(__dirname, 'storeConfigs', `${date.year}`, `${date.month}`);// 用date.day来定义文件名  ./storeConfigs/${date.year}/${date.month}/${date.day}
const aFilePath = path.resolve(folderPath, `${date.day}`);// 获取当前日期
function getDate() {const currentDate = new Date();const year = currentDate.getFullYear();const month = currentDate.getMonth() + 1;const day = currentDate.getDate();return { year: year, month: month, day: day };
}

读取配置

要实现读取的逻辑,首先要做下文件夹排空报错处理,!fs.existsSync(folderPath)假如路径不存在,那代表文件也不存在,mkdirp(folderPath);根据路径创建文件夹,再 fs.writeFileSync(aFilePath, '{}');创建文件。假如存在路径,!fs.existsSync(aFilePath)文件不存在,创建文件:

function CheckPathOrFiles() {if (!fs.existsSync(folderPath)) {mkdirp(folderPath);fs.writeFileSync(aFilePath, '{}');} else {if (!fs.existsSync(aFilePath)) {console.log(`创建文件:${aFilePath}`);fs.writeFileSync(aFilePath, '{}');}}
}
function mkdirp(dir) {if (fs.existsSync(dir)) { return true; }const dirname = path.dirname(dir);mkdirp(dirname); // 递归创建父目录fs.mkdirSync(dir);
}

在上面的代码中,我重构了mkdirp函数来创建空文件夹,而没有使用fs自带的mkdirSync(),使用后报错
Error: ENOENT: no such file or directory.Object.fs.mkdirSync,大致原因就是node.js低版本的漏洞吧,你也可以尝试直接使用下面代码代替mkdirp(folderPath);试试。

fs.mkdirSync(folderPath, { recursive: true }); // 递归创建路径

然后编写读取函数getHostConfigs(),通过fs.readFileSync(aFilePath, 'utf8')获取到aFilePath该文件路径下的文件:

function getHostConfigs() {console.log('进入读取环节..')try {CheckPathOrFiles()// 读取文件配置const data = fs.readFileSync(aFilePath, 'utf8');const hostConfigs = JSON.parse(data);console.log('配置校验成功!!');return hostConfigs;} catch (error) {console.error('读取失败:', error);return null;}
}

接下来是配置的更新写入,这部分可以根据自己需求来,比较重要的是let hostConfigs = getHostConfigs();读取配置,然后在这个函数里利用fs.writeFile(aFilePath,data)实现写入逻辑:

function updateHostConfigs(config) {let hostConfigs = getHostConfigs();if (!hostConfigs) {hostConfigs = {};}if (config.host) {hostConfigs[config.host] = config;}// 写入配置fs.writeFile(aFilePath, JSON.stringify(hostConfigs), (err) => {if (err) {console.error('写入出错:', err);} else {console.log('配置写入成功..');}});console.log(hostConfigs);
}

最后导出模块,方便其他脚本使用:

module.exports = {updateHostConfigs,getHostConfigs
};

http://www.ppmy.cn/news/1440298.html

相关文章

力扣练习4.23

415. 字符串相加 解题思路: 将竖式加法实现,从个位开始相加。需要处理两个点:两个数加起来大于10的进位;两个数不一样长。 第一个需要新建一个进位变量,每次加完对10整除,得到进位; 第二个需要…

Java 提取HTML文件中的文本内容

从 HTML 文件中提取文本内容是数据抓取中的一个常见任务,你可以将提取的文本信息用于编制报告、进行数据分析或其他处理。本文分享如何使用免费 Java API 从HTML 文件中提取文本内容。 安装免费Java库: 要通过Java提取HTML文本,需要用到Free…

一键生成原创文案的工具有哪些?有效盘点5款!

随着人工智能技术的不断发展,一键生成原创文案的工具成为了许多写作者必用的利器。这些工具能够帮助用户快速生成大量原创文案内容,并且还可以节省时间和精力。在本文中,我们将为大家有效盘点5款一键生成原创文案的工具,让大家了解…

【派兹互连·SailWind】美国瞄准“小华为”

有“小华为”之称的海能达遭遇了来自美国方面的压力。 近日,海能达紧急发公告称,公司收到美国法院的判令,临时被禁止在全球范围内销售双向无线电技术的产品,并处以每天100万美元的罚款,直至公司完全遵守禁诉令之时止。…

饲料拌料机是全自动整套饲料设备中的组成部分

养殖场饲料拌料机是全自动饲料机整套设备中的重要组成部分,其主要功能是将各种饲料原料进行混合和搅拌,以确保饲料成分的均匀分布和营养价值的z大化。 一、饲料拌料机的特点:1. 高效混合:饲料拌料机采用的搅拌技术和高效的搅拌装置&#xff0…

Golang:文件读写操作WriteFile、ReadFile和0644权限

方法签名 // 文件打开、写入、关闭 func OpenFile(name string, flag int, perm FileMode) (*File, error)func (f *File) WriteString(s string) (n int, err error) func (f *File) Write(b []byte) (n int, err error)func (f *File) Close() error// 写入文件 func WriteFi…

爬虫的实战应用之短信炸弹playwright现代网页测试工具

不讲废话,先上原理: 短信炸弹,也就是说持续对一个手机进行发送短信,实现的方式就是,利用某些网站的登录 ,注册的时候,发送短信验证码来实现。 如下图,其中有一个id为phone的输入框&a…

pikachu-xss

反射型xss(get) 1.字数限制 按原本的做法,应该先写一个script标签测试一下,但是发现有字符限制。 2.解决方法 这里有两个可以插入的地方,一个是submit的提交框,另一个是url地址栏 submit:修…