Skip to content

几种储存数据方案

不可丢失的重要数据

如用户订单。应当在后端存储,避免因客户端清理或设备丢失而造成数据丢失。

ts
// 示例:前端提交订单到后端
await fetch('/api/order', {
  method: 'POST',
  body: JSON.stringify(orderData),
  headers: { 'Content-Type': 'application/json' }
});

应用程序的配置数据

如用户的语言偏好设置。应当使用 localStorage 存储。

ts
// 使用 localStorage 保存语言偏好
localStorage.setItem('language', 'zh-CN');

// 读取语言偏好
const language = localStorage.getItem('language');

如用户的搜索历史。应当使用 IndexedDB 储存。

应用程序的缓存数据

ts
// 使用 IndexedDB 保存用户搜索历史
const request = indexedDB.open('myAppDB', 1);

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  // 创建对象存储空间
  db.createObjectStore('searchHistory', { keyPath: 'id', autoIncrement: true });
};

request.onsuccess = (event) => {
  const db = event.target.result;
  const tx = db.transaction('searchHistory', 'readwrite');
  const store = tx.objectStore('searchHistory');

  // 添加一条搜索记录
  store.add({ query: 'EziApp 教程', timestamp: Date.now() });

  // 读取所有搜索记录
  store.getAll().onsuccess = (e) => {
    console.log('搜索历史:', e.target.result);
  };
};

用户主动打开的数据

如用户主动打开一个文件用于编辑。应当使用 File System Access API。

ts
// 打开单个文件
const [fileHandle] = await window.showOpenFilePicker();
const file = await fileHandle.getFile();
const text = await file.text();
console.log(text);
ts
// 打开文件夹
const dirHandle = await window.showDirectoryPicker();
for await (const [name, handle] of dirHandle.entries()) {
  console.log(name, handle.kind);
}

应用程序主动访问的数据

如应用程序需要读取某个系统配置。 应当使用 EziApp FS接口 (目前未开放完成)
调用该接口有着最严厉的权限控制。
开发者应当避免使用此接口来保持应用程序友好。
每一次调用必须填写使用说明。 使用说明、访问路径等信息会提示给用户。
用户可选择 本次运行允许允许一次拒绝