nodejs,本地轻量localstorage

真的没必要npm搞一堆功能特别多的库,自己简单封装了一个

mod代码

const fs = require('fs');
const path = require('path');

class JsonFileStorage {
  constructor(filePath) {
    this.filePath = filePath;
    let data = '{}';
    try {
      data = fs.readFileSync(this.filePath, 'utf8');
      this.lastModified = fs.statSync(this.filePath).mtime;
    } catch (error) {
      // 文件不存在或读取失败,初始化空对象。
      this.lastModified = 0;
    }
    this.data = JSON.parse(data);
  }

  get(key, def = null) {
    const currentStat = fs.statSync(this.filePath);
    if (currentStat.mtime !== this.lastModified) {
      // 文件已被修改,重新加载数据。
      this.data = JSON.parse(fs.readFileSync(this.filePath, 'utf8'));
      this.lastModified = currentStat.mtime;
    }
    if (this.data[key]) {
      return this.data[key];
    }
    return def;
  }

  // 快速获取数据,不检查文件是否被修改。
  getQuick(key, def = null) {
    if (this.data[key]) {
      return this.data[key];
    }
    return def;
  }

  set(key, data) {
    this.data[key] = data;
    this.save();
  }

  save() {
    fs.writeFileSync(this.filePath, JSON.stringify(this.data, null, 2), 'utf8');
    this.lastModified = fs.statSync(this.filePath).mtime;
  }
}

module.exports = JsonFileStorage;

使用示例

const JsonFileStorage = require('./jsonFileStorage');

const storage = new JsonFileStorage('data.json');
storage.set('testKey', { value: 'testValue' });
console.log(storage.get('testKey'),storage.getQuick('testKey'));

使用说明

1. set(key,data)  是设置内容的,内容可以传递进去任何js基础数据类型

2. get(key)  默认会重新读取一下json,保证最新,但是性能会差一点点(取决于你的磁盘速度,非常一点点)

3. getQuick(key)  直接内存读取参数,非常非常快,对于你不会手动从磁盘编辑的设置项目,可以用getQuick

其他解决方案

如果你需要比较成熟的方案,更多的功能处理配置项,可以考虑:fs-extra,lowdb,configstore

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值