当前位置: 首页 > 工具软件 > Storage.js > 使用案例 >

storage.js基于localStorage 本地储存的 js 插件

戚飞雨
2023-12-01

storage.js

一款基于 localStorage 本地储存的 js 插件 ,提供有效期、只读取一次以及输出 json 数据等功能。

方法名说明参数
get读取keykey
set写入 key ,expires 是有效期,单位为天key, data, { expires }
remove删除 keykey
once写入 key,读取一次后删除 keykey, data, { expires }

示例

const storage = new Storage();

storage.set("name", { name: "ceshi" }, { expires: 1 }); // 1天后过期
storage.once("username", 'csdn');
storage.get("name"); // { name: "ceshi" }
storage.remove("name");

代码

class Storage {
    constructor(options) {}

    // 存数据前处理
    _getInputData(data, options) {
        const _data = {
            data,
            keyInfo: Object.assign(options, {
                timestamp: new Date().getTime()
            })
        };

        return JSON.stringify(_data);
    }

    // 取数据后处理
    _getOutputData(data) {
        const _data = JSON.parse(data);

        return _data;
    }

    // 获取_key的数据 => { data, keyInfo }
    _getData(_key) {
        const _data = localStorage.getItem(_key);

        return this._getOutputData(_data);
    }

    // 特殊处理key
    _getKey(key) {
        return `__storage__${key}__`;
    }

    _remove(_key) {
        localStorage.removeItem(_key);
    }

    // 是否有效期内
    _isExpired(_key) {
        const { keyInfo } = this._getData(_key);
        const { expires, timestamp } = keyInfo;

        if (!expires) {
            return true;
        }

        return (
            timestamp + expires * 24 * 3600 * 1000 - new Date().getTime() < 0
        );
    }

    // 是否只读取一次
    _isOnce(_key) {
        const { keyInfo } = this._getData(_key);
        const { isOnce } = keyInfo;

        return !!isOnce;
    }

    get(key) {
        const _key = this._getKey(key);
        const _data = this._getData(_key);

        if (!_data) {
            return null;
        }

        const isExpired = this._isExpired(_key);
        const isOnce = this._isOnce(_key);

        // 删除已过期或者只读取一次的_key
        if (isExpired || isOnce) {
            this._remove(_key);
        }

        return isExpired ? null : _data.data;
    }

    set(key, data, options = {}) {
        const _key = this._getKey(key);
        const _data = this._getInputData(data, options);

        localStorage.setItem(_key, _data);
    }

    remove(key) {
        const _key = this._getKey(key);

        this._remove(_key);
    }

    once(key, data, options = {}) {
        const _key = this._getKey(key);
        const _data = this._getInputData(
            data,
            Object.assign(options, {
                isOnce: true
            })
        );

        localStorage.setItem(_key, _data);
    }
}

export default Storage;
 类似资料: