UNPKG

@ylz/plugins

Version:

ylz plugins

148 lines (141 loc) 3.68 kB
import Encryption from './Encryption' export const createStorage = ({ key = '_12345678901234@', iv = '@12345678901234_', storage = sessionStorage, hasEncrypt = true } = {}) => { if (hasEncrypt && [key.length, iv.length].some((item) => item !== 16)) { console.error('hasEncrypt为true时key或者iv必须位16位') return } const encryption = new Encryption({ key, iv }) /** *缓存类 *构造参数可以传入 sessionStorage,localStorage, * @class Cache * @example */ const WebStorage = class WebStorage { /** * * @param {*} storage */ constructor() { this.storage = storage this.encryption = encryption this.hasEncrypt = hasEncrypt } /** * * 设置缓存 * @param {string} key 缓存键 * @param {*} value 缓存值 * @expire 过期时间 单位秒 * @memberof Cache */ set(key, value, expire = null) { const stringData = JSON.stringify({ value, expire: expire !== null ? new Date().getTime() + expire * 1000 : null }) const stringifyValue = this.hasEncrypt ? this.encryption.encryptByAES(stringData) : stringData this.storage.setItem(key, stringifyValue) } /** * *读取缓存 * @param {string} key 缓存键 * @returns 缓存值 * @memberof Cache */ get(key, def = null) { const item = this.storage.getItem(key) if (item) { const decItem = this.hasEncrypt ? this.encryption.decryptByAES(item) : item try { const data = JSON.parse(decItem) const { value, expire } = data if (expire === null || expire >= new Date().getTime()) { return value } this.remove(key) } catch (e) { return def } } return def } /** * *删除缓存 * @param {string} key 缓存键 * @memberof Cache */ remove(key) { this.storage.removeItem(key) } /** * *删除该实例所有缓存 * @memberof Cache */ clear() { this.storage.clear() } /** * 添加cookie * @param name cookie名字 * @param value cookie内容 * @param day 过期时间 * 如果过期时间未设置,默认管理浏览器自动删除 * 例子: * cookieData.set('name','value',) */ setCookie(name, value, expire = null) { value = this.hasEncrypt ? this.encryption.encryptByAES(JSON.stringify(value)) : value document.cookie = name + '=' + value + '; Max-Age=' + expire } /** * 根据名字获取cooki值 * @param name cookie名 * @returns {*} cookie值 */ getCookie(name) { const arr = document.cookie.split('; ') for (let i = 0; i < arr.length; i++) { const arr2 = arr[i].split('=') if (arr2[0] === name) { let message = null const str = arr2[1] if (this.hasEncrypt && str) { message = this.encryption.decryptByAES(str) try { return JSON.parse(message) } catch (e) { return str } } return str } } return '' } /** * 根据cookie名字删除cookie * @param name cookie名字 */ removeCookie(key) { this.setCookie(key, 1, -1) } clearCookie() { const keys = document.cookie.match(/[^ =;]+(?==)/g) if (keys) { for (let i = keys.length; i--;) { document.cookie = keys[i] + '=0;expires=' + new Date(0).toUTCString() } } } } return new WebStorage() }