localStorage
Storage 本身是不支持过期时间设置的,要支持设置过期时间,可以效仿 Cookie 的做法,setStorage(key,value,expire) 方法,接收三个参数,第三个参数就是设置过期时间的,用相对时间,单位秒,要对所传参数进行类型检查。可以设置统一的过期时间,也可以对单个值得过期时间进行单独配置。两种方式按需配置。
设置 setStorage
export const setStorage = (key,value,expire=0) => {
if (value === '' || value === null || value === undefined) {
value = null;
}
if (isNaN(expire) || expire < 1) throw new Error("Expire must be a number");
expire = (expire?expire:config.expire) * 60000;
let data = {
value: value, // 存储值
time: Date.now(), //存值时间戳
expire: expire // 过期时间
}
window[config.type].setItem(key, JSON.stringify(data));
}
获取 getStorage
首先要对 key 是否存在进行判断,防止获取不存在的值而报错。对获取方法进一步扩展,只要在有效期内获取 Storage 值,就对过期时间进行续期,如果过期则直接删除该值。并返回 null
export const getStorage = (key) => {
// key 不存在判断
if (!window[config.type].getItem(key) || JSON.stringify(window[config.type].getItem(key)) === 'null'){
return null;
}
// 优化 持续使用中续期
const storage = JSON.parse(window[config.type].getItem(key));
console.log(storage)
let nowTime = Date.now();
console.log(config.expire*6000 ,(nowTime - storage.time))
// 过期删除
if (storage.expire && config.expire*6000 < (nowTime - storage.time)) {
removeStorage(key);
return null;
} else {
// 未过期期间被调用 则自动续期 进行保活
setStorage(key,storage.value);
return storage.value;
}
}
获取所有值 getAllStorage
export const getAllStorage = () => {
let len = window[config.type].length // 获取长度
let arr = new Array() // 定义数据集
for (let i = 0; i < len; i++) {
// 获取key 索引从0开始
let getKey = window[config.type].key(i)
// 获取key对应的值
let getVal = window[config.type].getItem(getKey)
// 放进数组
arr[i] = { 'key': getKey, 'val': getVal, }
}
return arr
}
删除 removeStorage
const autoAddPrefix = (key) => {
const prefix = config.prefix ? config.prefix + '_' : '';
return prefix + key;
}
// 删除 removeStorage
export const removeStorage = (key) => {
window[config.type].removeItem(autoAddPrefix(key));
}
清空 clearStorage
export const clearStorage = () => {
window[config.type].clear();
}
