uniapp存储携带过期时间

uniapp存储携带过期时间

项目中存储的过期时间一般会做两种校验。1.接口校验失败返回401。 2.本地存储的过期时间。本文介绍uniapp自定义封装存储,实现存储可携带过期时间。

详细代码

// 定义一小时对应的毫秒数,用于计算过期时间
const H = 60 * 60 * 1000;

class Storage {
  constructor(prefix) {
    // 如果没有传入 prefix 参数,则使用配置文件中的 name 属性作为前缀
    this.prefix = prefix || "zStorage";
  }

  // 根据传入的键生成带有前缀的完整键名
  getKey(key) {
    return `__${this.prefix}_${key}__`;
  }

  // 设置存储数据,支持设置过期时间
  set(key, value, expire = 1) {
    const KEY = this.getKey(key);
    try {
      // 将数据和过期时间封装成一个对象并转换为 JSON 字符串
      const data = JSON.stringify({
        value,
        expire: !expire ? null : Date.now() + expire * H,
      });
      // 使用 uni-app 的同步存储方法将数据存储到本地
      uni.setStorageSync(KEY, data);
    } catch (error) {
      console.error("存储数据时出错:", error);
    }
  }

  // 获取存储的数据,会检查数据是否过期
  get(key) {
    const KEY = this.getKey(key);
    try {
      // 使用 uni-app 的同步获取方法从本地获取数据
      const val = uni.getStorageSync(KEY);
      if (!val) {
        return null;
      }
      // 将获取到的 JSON 字符串解析为对象
      const { value, expire } = JSON.parse(val);
      if (expire && expire < Date.now()) {
        // 若数据已过期,调用 remove 方法删除该数据
        this.remove(key);
        return null;
      }
      return value;
    } catch (error) {
      // 原来的存token可能不是JSON格式,所以这里需要兼容一下
      console.error("获取数据时出错:", error);
      return null;
    }
  }

  // 删除指定键的存储数据
  remove(key) {
    const KEY = this.getKey(key);
    try {
      // 使用 uni-app 的同步删除方法从本地删除数据
      uni.removeStorageSync(KEY);
    } catch (error) {
      console.error("删除数据时出错:", error);
    }
  }

  // 清空所有本地存储数据
  clear() {
    try {
      // 使用 uni-app 的同步清空方法清空本地存储
      uni.clearStorageSync();
    } catch (error) {
      console.error("清空存储时出错:", error);
    }
  }
}

export default Storage;

注意事项:
1. 在存储时会先进行自定义key的编码处理,防止变量污染。
2. 在获取对应的json解析值时需要做异常处理,因为正在使用的版本中可能存储的不是json值,并且需要在异常条件中返回null,做兼容处理

使用示例

// 在main.js或全局进行挂载
import StorageExpire from "@/utils/storage";

uni.$storage = new StorageExpire();
// xxx.vue 中使用
uni.$storage.set("token", token, 2);  // 单位是小时
const token = uni.$storage.get("token")
posted @ 2025-02-11 11:55  含若飞  阅读(144)  评论(0)    收藏  举报