ph-utils
Version:
js 开发工具集,前后端都可以使用(commonjs和es module)
74 lines (73 loc) • 2.19 kB
JavaScript
function getStorage(storage = "session") {
return storage === "session" ? sessionStorage : localStorage;
}
/**
* 存储值到 Storage 中
* @param key 设置的 key
* @param value 设置的值
* @param [option.storage] session 或 local, 默认: session
* @param [option.expire] 数据有效期, 单位秒, 默认: -1 - 永久存储
*
* @example <caption>1. 存储到 SessionStorage</caption>
* set("key", "value");
*
* @example <caption>2. 存储到 LocalStorage</caption>
* set("key", "value", { storage: "local" });
*/
export function set(key, value, option) {
const opts = {
expire: -1,
storage: "session",
...option,
};
const saveData = JSON.stringify({
value,
time: Date.now(),
expire: opts.expire === -1 ? -1 : Math.floor(Date.now() / 1000) + opts.expire,
});
getStorage(opts.storage).setItem(key, saveData);
}
/**
* 清空所有的缓存内容
* @param storage 待清空的缓存对象
*/
export function clear(storage) {
getStorage(storage).clear();
}
/**
* 删除存储到 Storage 中的数据
* @param key
* @param storage
*/
export function remove(key, storage) {
getStorage(storage).removeItem(key);
}
/**
* 从 Storage 中取出数据
* @param key 保存时的 key
* @param defaultValue 没有数据时的默认值
* @param [option.delete] 是否在取出后,删除数据,默认:false - 取出后删除数据
* @param [option.storage] 使用的 Storage ,可以是 localStorage、sessionStorage, 默认: localStorage、sessionStorage
* @returns Storage 中 key 对应的数据
*/
export function get(key, defaultValue, option) {
const opts = (option || { delete: false });
const storage = getStorage(opts.storage);
let data = storage.getItem(key);
if (data == null) {
return defaultValue || null;
}
data = JSON.parse(data);
let d = data.value;
if (data.expire !== -1) {
// 数据过期
if (Math.floor(Date.now() / 1000) > data.expire) {
d = null;
storage.removeItem(key);
}
}
if (opts.delete) {
storage.removeItem(key);
}
return d || defaultValue;
}