美文网首页
dexie.js 使用上的问题

dexie.js 使用上的问题

作者: CRJ997 | 来源:发表于2020-06-28 13:21 被阅读0次

    详细的使用教程实际上都可以在官网上看到,我这边记录一些问题。

    1. dexie.version()

    这个东西在一开始创建数据库的时候就要用上,但是用了之后就感觉很奇怪。使用官网的快速开始例子:

    <!doctype html>
    <html>
     <head>
      <script src="https://unpkg.com/dexie@latest/dist/dexie.js"></script>
      <script>
       //
       // Declare Database
       //
       var db = new Dexie("FriendDatabase");
       db.version(1).stores({
         friends: "++id,name,age"
       });
    
       //
       // Manipulate and Query Database
       //
       db.friends.add({name: "Josephine", age: 21}).then(function() {
           return db.friends.where("age").below(25).toArray();
       }).then(function (youngFriends) {
           alert ("My young friends: " + JSON.stringify(youngFriends));
       }).catch(function (e) {
           alert ("Error: " + (e.stack || e));
       });
      </script>
     </head>
    </html>
    

    然后去开发者工具中看的时候,版本却是10。详情见图1


    图1

    哦豁,什么情况,1直接跳过,变成10?然后去官网找答案。发现还真有: Dexie.version().好像是因为一些原因,所以会把输入的数字乘以10然后再向下取整。

    2. dexie打开已经存在的数据库

    一开始以为使用new Dexie('databaseName');,就会自动判别是已经存在的数据库还是新的。然后写了下面的代码进行测试:

    var db = new Dexie('FriendDatabase');
    db.version(0.1).stores({
         friends: "++id,name,age"
     });
    db = new Dexie('FriendDatabase');
    

    发现创建的表给清空了,好吧,还是去官网找答案:Dexie,链接无用的话,详细的代码如下:

    // 创建新的数据库
    // Declare db instance
    var db = new Dexie("MyDatabase");
    
    // Define Database Schema
    db.version(1).stores({
        friends: "++id, name, age, isCloseFriend",
        notes: "++id, title, date, *items"
    });
    
    // Interact With Database
    db.transaction('rw', db.friends, db.notes, function* () {
    
        // Let's add some data to db:
        var friend1Id = yield db.friends
          .add({name: 'Camilla', age: 25, isCloseFriend: 1});
        var friend2Id = yield db.friends
          .add({name: 'Ban Ki-moon', age: 70, isCloseFriend: 0});
    
        var noteId = yield db.notes.add({
            title: 'Shop tomorrow',
            date: new Date(),
            items: ['milk', 'butter']
        });
    
        // Let's query the db
        var closeFriends = yield db.friends
            .where('isCloseFriend').equals(1)
            .toArray();
    
        console.log("Close friends:" + closeFriends.map(f => f.name));
    
        var toShop = yield db.notes
            .where('title').startsWithIgnoreCase ('shop')
            .toArray();
    
        console.log("Shopping list: " + toShop.map(note => note.items));
    
    }).catch(function(err) {
    
        // Catch any error event or exception and log it:
        console.error(err.stack || err);
    });
    
    
    // 打开已经存在的数据库
    new Dexie('MyDatabase').open().then(function (db) {
        console.log ("Found database: " + db.name);
        console.log ("Database version: " + db.verno);
        db.tables.forEach(function (table) {
            console.log ("Found table: " + table.name);
            console.log ("Table Schema: " +
                JSON.stringify(table.schema, null, 4));
        });
    }).catch('NoSuchDatabaseError', function(e) {
        // Database with that name did not exist
        console.error ("Database not found");
    }).catch(function (e) {
        console.error ("Oh uh: " + e);
    });
    

    3. 什么时候要对indexDB进行upgrade

    这个应该是indexDB的问题,不过Dexie本来就是为了更方便的操作IndexDB才出来的,就记录在这里了。
    答案很简单:就是在需要新增,删除表或者表的列的时候,就需要进行升级。或者说,在需要更改数据库的schema的时候,就需要进行版本的升级。

    相关文章

      网友评论

          本文标题:dexie.js 使用上的问题

          本文链接:https://www.haomeiwen.com/subject/caoifktx.html