storage.js实现数据持久化

storage.js

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

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

使用实例(1)---(这种需要在 HTML 文档中引用)

<script src="path/to/storage.js"></script>
//这种方法使用时,将storage.js文件中的export default Storage去掉

页面中使用 

const storage = new Storage();

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

使用实例(2)---(将以上js文件引入mian.js文件中)

import * as storage from "./common/utils/storage.js"
Vue.prototype.$storage = storage;

页面中使用  

let token=this.$storage.get("token")

storage.js代码

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

        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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值