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

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
};

相关推荐

  1. Node.jsfs模块实现配置文件

    2024-04-25 10:36:01       37 阅读
  2. nodejsfs删除文件

    2024-04-25 10:36:01       31 阅读
  3. node.jsfs模块语法讲解

    2024-04-25 10:36:01       30 阅读
  4. Node.jsfs模块

    2024-04-25 10:36:01       57 阅读
  5. C#配置文件AppSettings

    2024-04-25 10:36:01       20 阅读
  6. NodeNode.Js--fs文件系统模块

    2024-04-25 10:36:01       36 阅读
  7. nodejs fs模块

    2024-04-25 10:36:01       70 阅读
  8. nodejs学习计划--(二)fs文件系统和path模块

    2024-04-25 10:36:01       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 10:36:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 10:36:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 10:36:01       87 阅读
  4. Python语言-面向对象

    2024-04-25 10:36:01       96 阅读

热门阅读

  1. 微前端通信机制及其实现

    2024-04-25 10:36:01       30 阅读
  2. css 动画基础知识和案例

    2024-04-25 10:36:01       34 阅读
  3. Mysql 的char 和varchar的的区别

    2024-04-25 10:36:01       33 阅读
  4. CSS基础——2.CSS选择器

    2024-04-25 10:36:01       32 阅读
  5. 机器学习之模糊聚类(Fuzzy Clustering)附代码

    2024-04-25 10:36:01       35 阅读
  6. 网络安全学习路线推荐

    2024-04-25 10:36:01       38 阅读