本地缓存storage封装

封装本地数据缓存

/**
 * @author yang
 * @description 本地缓存
 * */


// 默认有效时间
let DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7

const createStorage = (prefixKey = '', storage = localStorage) => {

    class Storage {
        private storage = storage
        private prefixKey?: string = prefixKey

        /**
         * @description 处理存储数据的前缀
         * @param {key: string}
        */
        private getKey(key: string) {
            return `${this.prefixKey}${key}`.toUpperCase();
        }

        /**
         * @description 获取值
         * @param {key: string, def: any}
         * */
        public get(key: string, def: any = null) {
            let data = storage.getItem(this.getKey(key))
            if (data) {
                try {
                    let { value, expire } = JSON.parse(data)
                    if (expire === null || expire >= Date.now()) {
                        return value
                    } else {
                        this.remove(key)
                    }
                } catch (error) {
                    return def
                }
            } else {
                return def
            }
        }

        /**
         * @description 存储值
         * @param {key: string, value: any, expire: number | null}
         * */
        public set(key: string, value: any, expire: number | null = DEFAULT_CACHE_TIME) {
            let data = {
                value,
                expire: expire !== null ? new Date().getTime() + expire * 1000 : null
            }
            this.storage.setItem(this.getKey(key), JSON.stringify(data))
        }

        setCookie(name: string, value: any, expire: number | null = DEFAULT_CACHE_TIME) {
            document.cookie = `${this.getKey(name)}=${value}; Max-Age=${expire}`;
        }

        /**
         * 根据名字获取cookie值
         * @param name
         */
        getCookie(name: string): string {
            const cookieArr = document.cookie.split('; ');
            for (let i = 0, length = cookieArr.length; i < length; i++) {
                const kv = cookieArr[i].split('=');
                if (kv[0] === this.getKey(name)) {
                    return kv[1];
                }
            }
            return '';
        }

        /**
         * 根据名字删除指定的cookie
         * @param {string} key
         */
        removeCookie(key: string) {
            this.setCookie(key, 1, -1);
        }

        /**
         * 清空cookie,使所有cookie失效
         */
        clearCookie(): void {
            const keys = document.cookie.match(/[^ =;]+(?==)/g);
            if (keys) {
                for (let i = keys.length; i--;) {
                    document.cookie = keys[i] + '=0;expire=' + new Date(0).toUTCString();
                }
            }
        }

        /**
         * @description 清除值
         * @param {key: string}
         * */
        public remove(key: string) {
            this.storage.removeItem(this.getKey(key))
        }


        /**
         * @description 清空storage
         * */
        public clear(): void {
            this.storage.clear()
        }
    }


    return new Storage
}


export {
    createStorage
}

posted @ 2021-10-31 14:19  boyyang  阅读(153)  评论(0编辑  收藏  举报
//黑猫咪:https://unpkg.com/live2d-widget-model-hijiki@1.0.5/assets/hijiki.model.json //白猫咪:https://unpkg.com/live2d-widget-model-tororo@1.0.5/assets/tororo.model.json //萌娘:https://unpkg.com/live2d-widget-model-shizuku@1.0.5/assets/shizuku.model.json //狗狗:https://unpkg.com/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json //萌妹1号:https://unpkg.com/live2d-widget-model-z16@1.0.5/assets/z16.model.json //萌妹2号:https://unpkg.com/live2d-widget-model-koharu@1.0.5/assets/koharu.model.json //萌妹3号:https://unpkg.com/live2d-widget-model-hibiki@1.0.5/assets/hibiki.model.json //妹子4号:https://unpkg.com/live2d-widget-model-izumi@1.0.5/assets/izumi.model.json //妹子5号:https://unpkg.com/live2d-widget-model-miku@1.0.5/assets/miku.model.json //6号:https://unpkg.com/live2d-widget-model-nico@1.0.5/assets/nico.model.json //7号:https://unpkg.com/live2d-widget-model-ni-j@1.0.5/assets/ni-j.model.json //8号:https://unpkg.com/live2d-widget-model-nipsilon@1.0.5/assets/nipsilon.model.json //9号:https://unpkg.com/live2d-widget-model-nito@1.0.5/assets/nito.model.json //10号:https://unpkg.com/live2d-widget-model-tsumiki@1.0.5/assets/tsumiki.model.json //11号:https://unpkg.com/live2d-widget-model-unitychan@1.0.5/assets/unitychan.model.json //帅哥1号:https://unpkg.com/live2d-widget-model-chitose@1.0.5/assets/chitose.model.json //帅哥2号:https://unpkg.com/live2d-widget-model-haruto@1.0.5/assets/haruto.model.json