@anfo/db

0.0.2 • Public • Published

@anfo/db NPM

Features

  • 隐藏版本相关操作
  • 使用接近原indexedDB的api风格
  • 使用Promise风格返回,更容易使用

使用方法

引入

import AnfoDB from '@anfo/db'
<script src="db.js"></script>

使用

import AnfoDB from '@anfo/db'

let config = {
    // db name
    db: 'anfo',
    /* 
    日志等级
        warn: 显示warn、error日志
        debug: 显示所有日志
        error: 只显示error日志
    */
    debug: 'warn',
    /*
    判断当前选择数据库的objectStores的配置,包含对索引,索引属性进行检查,
    比对后发现与当前该config配置存在不同处会触发升级,如果是修改schemas的
    操作将会删除原来的objectStore,这个时候通过这里返回一个Promise,reject
    的情况表示不同意升级,将不会根据当前config执行更新ObjectStore的操作,
    而如果返回Resolve则会对数据库进行升级,删除原来的数据库并创建新的与配置
    一致的数据库

    所以这里的Promise可以使用confirm dialog询问用户意见,是否重新创建新的
    数据库,或者在此Promise对原数据进行一个缓存,新建后重新插入新的表中。
    */
    upgradePromise: ()=>Promise.reject(),
    stores: {
        // object store name
        user: {
            // object store attributes
            keyPath: 'id',
            autoIncrement: false,

            // 索引
            indexes: [
                // name, keyPath, parameteres
                ['name', 'name', {
                    // unique: false,
                    // multiEntry: false,
                    // locale: '',
                }]
            ]
        }
    }
}

let db = new AnfoDB(config)

// init会执行检查config与实际表异常的逻辑并据此判断是否需要进行升级
db.init().then(()=>{
    // 初始化成功,用户拒绝升级也会在这里
}).catch(err=>{
    // 初始化失败
})

API

  • Anfo.prototype.transaction(storeNames: Array, 'readonly' | 'readwrite') : Transaction
  • Transaction.prototype.store(storeName: String) : Store
  • Transaction.prototype.do() : Promise
  • Transaction.prototype.doOne() : Promise

下面的接口与原indexedDB的接口是一致的,但是下面的接口都不会真正执行操作,会等待Transaction执行do、doOne的时候开始执行。返回的Promise也会再执行do、doOne的时候被Resolve/Reject,所以需要注意的是在执行Transaction.prototype.do / Transaction.prototype.doOne前不要使用await等待下面操作返回的Promise,会陷入永无止境的等待中。

  • Store.prototype.add : Promise
  • Store.prototype.put : Promise
  • Store.prototype.get : Promise
  • Store.prototype.count : Promise
  • Store.prototype.getAll : Promise
  • Store.prototype.delete : Promise
  • Store.prototype.clear : Promise
  • Store.prototype.index(indexName: String) : Store

openCursor的接口做了一些修改,当cursorHandler返回True时会继续遍历后面符合条件的数据,否则会停止遍历,返回的Promise会包含遍历过的所有数据。

  • Store.prototype.openCursor(cursorHandler: Function, keyRange: IDBKeyRange) : Promise

下面是一些快速单表操作的API,与上面的不同就是上面的连续操作是在事务中进行的,下面的每一个操作都是一个单独的事务。

  • AnfoDB.prototype.store(storeName: String) : QuickStore
  • QuickStore.prototype.add : Promise
  • QuickStore.prototype.put: Promise
  • QuickStore.prototype.get : Promise
  • QuickStore.prototype.count : Promise
  • QuickStore.prototype.getAll : Promise
  • QuickStore.prototype.delete : Promise
  • QuickStore.prototype.clear : Promise
  • QuickStore.prototype.index(indexName: String) : QuickStore
  • QuickStore.prototype.openCursor(cursorHandler: Function, keyRange: IDBKeyRange) : Promise
let db = new DB(config)

let t = db.transaction(['user'], 'readwrite')
let s = t.store('user')
s.index('name').get('Anfo')
s.index('name').get('Bnfo')
t.do.then(data=>{
    // Array 顺序返回所有store操作的结果
    console.log(data)
})
/*
t.doOne 会返回t.do的第一个结果,快速store操作就是doOne的语法糖
*/
let db = new DB(config)
db.store('user').index('name').get('Anfo').then(data=>{
    console.log(data)
})

更多的例子可以参考test/db.test.js中的用例

Readme

Keywords

none

Package Sidebar

Install

npm i @anfo/db

Weekly Downloads

1

Version

0.0.2

License

none

Unpacked Size

60.2 kB

Total Files

11

Last publish

Collaborators

  • longjiahui