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")