123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- // 默认缓存期限为7天
- const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7;
- /**
- * 创建本地缓存对象
- * @param {string=} prefixKey -
- * @param {Object} [storage=sessionStorage] - sessionStorage | localStorage
- */
- export const createStorage = ({
- prefixKey = '',
- storage = sessionStorage
- } = {}) => {
- /**
- * 本地缓存类
- * @class Storage
- */
- const Storage = class {
- private storage = storage;
- private prefixKey?: string = prefixKey;
- private getKey(key: string) {
- return `${this.prefixKey}${key}`.toUpperCase();
- }
- /**
- * @description 设置缓存
- * @param {string} key 缓存键
- * @param {*} value 缓存值
- * @param expire
- */
- set(key: string, value: any, expire: number | null = DEFAULT_CACHE_TIME) {
- const stringData = JSON.stringify({
- value,
- expire: expire !== null ? new Date().getTime() + expire * 1000 : null
- });
- this.storage.setItem(this.getKey(key), stringData);
- }
- /**
- * 读取缓存
- * @param {string} key 缓存键
- * @param {*=} def 默认值
- */
- get(key: string, def: any = null) {
- const item = this.storage.getItem(this.getKey(key));
- if (item) {
- try {
- const data = JSON.parse(item);
- const { value, expire } = data;
- // 在有效期内直接返回
- if (expire === null || expire >= Date.now()) {
- return value;
- }
- this.remove(key);
- } catch (e) {
- return def;
- }
- }
- return def;
- }
- /**
- * 从缓存删除某项
- * @param {string} key
- */
- remove(key: string) {
- this.storage.removeItem(this.getKey(key));
- }
- /**
- * 清空所有缓存
- * @memberOf Cache
- */
- clear(): void {
- this.storage.clear();
- }
- /**
- * 设置cookie
- * @param {string} name cookie 名称
- * @param {*} value cookie 值
- * @param {number=} expire 过期时间
- * 如果过期时间未设置,默认关闭浏览器自动删除
- * @example
- */
- 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();
- }
- }
- }
- };
- return new Storage();
- };
- export const storage = createStorage();
- export default Storage;
|