Skip to content

创建 Store

Store.create() 是 js-lite-rest 的核心静态方法,用于创建 Store 实例。

语法

javascript
JsLiteRest.create(data?, options?)

参数

data (可选)

类型: Object | string

初始数据或数据文件路径。

作为对象传入

javascript
import JsLiteRest from 'js-lite-rest/browser'; // 浏览器环境
// import JsLiteRest from 'js-lite-rest'; // Node.js 环境

const store = await JsLiteRest.create({
  users: [
    { id: 'user1', name: 'Alice', email: 'alice@example.com' },
    { id: 'user2', name: 'Bob', email: 'bob@example.com' }
  ],
  posts: [
    { id: 'post1', title: '第一篇文章', usersId: 'user1' },
    { id: 'post2', title: '第二篇文章', usersId: 'user2' }
  ]
});

作为文件路径传入

javascript
// Node.js 环境 - 文件路径
import JsLiteRest from 'js-lite-rest';
const store = await JsLiteRest.create('./data.json');

// 浏览器环境 - 存储键名
import JsLiteRest from 'js-lite-rest/browser';
const store = await JsLiteRest.create('my-app-data');

options (可选)

类型: StoreOptions

配置选项对象。

javascript
const store = await JsLiteRest.create({}, {
  idKeySuffix: 'Id',
  savePath: 'custom-path',  // 数据存储路径
  overwrite: false,         // 是否覆盖现有数据
  adapter: customAdapter
});

配置选项

idKeySuffix

类型: string
默认值: 'Id'

ID 键的后缀,用于关联查询。

javascript
const store = await JsLiteRest.create({}, {
  idKeySuffix: 'Id'  // posts 表中的 usersId 字段会关联到 users 表
});

savePath

类型: string
默认值: Node.js 中为 'js-lite-rest.json',浏览器中为 'js-lite-rest'

数据存储路径。在 Node.js 中作为文件路径,在浏览器中作为存储键名。

javascript
// Node.js 环境
const store = await JsLiteRest.create({}, {
  savePath: './data/my-data.json'
});

// 浏览器环境
const store = await JsLiteRest.create({}, {
  savePath: 'my-app-storage-key'
});

overwrite

类型: boolean
默认值: false

是否覆盖现有数据。设为 true 时,初始数据会完全替换存储中的数据;设为 false 时,会合并数据。

javascript
const store = await JsLiteRest.create({ users: [] }, {
  overwrite: true  // 完全替换现有数据
});

adapter

类型: Adapter

自定义适配器实例。当提供自定义适配器时,将使用它来处理所有数据操作。

返回值

类型: Promise<Store>

返回一个 Promise,解析为 Store 实例。

使用示例

基本用法

javascript
import JsLiteRest from 'js-lite-rest/browser'; // 浏览器环境
// import JsLiteRest from 'js-lite-rest'; // Node.js 环境

// 创建空的 store
const store = await JsLiteRest.create();

// 创建带初始数据的 store
const store = await JsLiteRest.create({
  users: [],
  posts: []
});

Node.js 环境

javascript
import JsLiteRest from 'js-lite-rest';

// 使用默认文件路径
const store = await JsLiteRest.create({
  users: [{ id: 'user1', name: 'Alice' }]
});

// 使用自定义文件路径
const store = await JsLiteRest.create({}, {
  savePath: './data/users.json'
});

// 从现有文件加载
const store = await JsLiteRest.create('./existing-data.json');

浏览器环境

javascript
import JsLiteRest from 'js-lite-rest/browser';

// 使用默认存储键名
const store = await JsLiteRest.create();

// 使用自定义存储键名
const store = await JsLiteRest.create({}, {
  savePath: 'my-app-data'
});

// 带初始数据
const store = await JsLiteRest.create({
  settings: { theme: 'dark' },
  users: []
});

自定义适配器

javascript
// 自定义内存适配器示例
class MemoryAdapter {
  constructor() {
    this.data = {};
  }
  
  async get(path, query) {
    // 实现获取逻辑
    const [resource, id] = path.split('/');
    if (id) {
      return this.data[resource]?.find(item => item.id === id);
    }
    return this.data[resource] || [];
  }
  
  async post(path, data) {
    // 实现创建逻辑
    const resource = path.split('/')[0];
    if (!this.data[resource]) this.data[resource] = [];
    
    const item = { ...data, id: this.generateId() };
    this.data[resource].push(item);
    return item;
  }
  
  generateId() {
    return Date.now().toString(36) + Math.random().toString(36).substr(2);
  }
}

const store = await JsLiteRest.create({}, {
  adapter: new MemoryAdapter()
});

CDN 使用

javascript
// UMD 版本
<script src="https://unpkg.com/js-lite-rest/dist/js-lite-rest.browser.umd.js"></script>
<script>
  // 使用全局变量 JsLiteRest
  (async () => {
    const store = await JsLiteRest.create({
      users: [{ id: 'user1', name: 'Alice' }]
    });
    
    const users = await store.get('users');
    console.log(users);
  })();
</script>

错误处理

javascript
try {
  const store = await JsLiteRest.create('./non-existent.json');
} catch (error) {
  console.error('创建 store 失败:', error.message);
  
  // js-lite-rest 的错误格式
  if (error.code) {
    console.log('错误代码:', error.code);
    console.log('错误消息:', error.message);
    console.log('成功状态:', error.success); // false
  }
}

// 处理数据加载错误
try {
  const store = await JsLiteRest.create('corrupted-data');
} catch (error) {
  console.warn('数据损坏,使用默认数据');
  const store = await JsLiteRest.create({
    users: [],
    posts: []
  });
}

Released under the MIT License.