Vue.js+Dexie:作为带有自定义函数的模块导入
我有一个工作的Vue.js和一个Dexie IndexedDB数据库,工作平稳,如下所示: 在Vue中需要访问数据库的任何位置,我都会导入模块:Vue.js+Dexie:作为带有自定义函数的模块导入,vue.js,vuejs2,dexie,dexiejs,Vue.js,Vuejs2,Dexie,Dexiejs,我有一个工作的Vue.js和一个Dexie IndexedDB数据库,工作平稳,如下所示: 在Vue中需要访问数据库的任何位置,我都会导入模块: import db from '@/services/MyIdb' 我可以直接访问Dexie方法,例如: db.table(tableName).clear() 模块MyIdb.js的设置如下:为了简化,我删除了一些代码和表: import Dexie from 'dexie' const db = new Dexie('myDa
import db from '@/services/MyIdb'
我可以直接访问Dexie方法,例如:
db.table(tableName).clear()
模块MyIdb.js的设置如下:为了简化,我删除了一些代码和表:
import Dexie from 'dexie'
const db = new Dexie('myDatabase')
const idb_schema_old = { myTable: '&key', }
const idb_schema = { myTable: '&key', }
const db_version_old = 9
const db_version = 10
// NEW VERSION
db.version(db_version_old).stores(idb_schema_old)
db.version(db_version).stores(idb_schema)
db.open().then(function(){
// Success
}).catch(Dexie.UpgradeError, function (e) {
// Failed with UpgradeError
console.error ("Upgrade error: " + e.message)
console.log("Dropping database and installing latest version")
db.delete()
db.version(db_version).stores(idb_schema)
db.open().catch(function (err) {
console.error (err.stack || err);
})
}).catch(Error, function (e) {
// Any other error derived from standard Error
console.error ("Error: " + e.message);
}).catch(function (e) {
// Other error such as a string was thrown
console.error (e);
});
export default db;
一切都好。但是,现在我希望能够从程序中的任意点调用初始化,有一个按钮可以删除并重新加载数据库。因此,类似这样的情况:
import Dexie from 'dexie'
const db = new Dexie('myDatabase')
const idb_schema_old = { myTable: '&key', }
const idb_schema = { myTable: '&key', }
const db_version_old = 9
const db_version = 10
init() {
// NEW VERSION
db.version(db_version_old).stores(idb_schema_old)
db.version(db_version).stores(idb_schema)
db.open().then(function(){
// Success
}).catch(Dexie.UpgradeError, function (e) {
// Failed with UpgradeError
console.error ("Upgrade error: " + e.message)
console.log("Dropping database and installing latest version")
db.delete()
db.version(db_version).stores(idb_schema)
db.open().catch(function (err) {
console.error (err.stack || err);
})
}).catch(Error, function (e) {
// Any other error derived from standard Error
console.error ("Error: " + e.message);
}).catch(function (e) {
// Other error such as a string was thrown
console.error (e);
});
}
export default db;
初始化现在是一个函数,我想调用它,比如db.init。
上面的代码是错误的,不起作用。但是如何实现这样的功能,我可以调用db.init或something.init之类的函数
在我的整个程序中,我已经导入了db并调用了Dexie方法,我不想重写所有这些。我认为这段代码是对Dexie如何处理升级的误解。您不必捕获UpgradeError并重新初始化数据库。您只需声明您使用的版本,如果需要,Dexie将升级数据库。在Dexie3中,您也不需要在代码中保留模式的旧版本,请参阅 您似乎需要执行删除和重新创建数据库的操作。这应该使用,然后是对的新调用来完成。您也可以在所有表上使用,但不会重置自动递增键,并且无法在该操作中更改架构 异步函数重新创建DatabaseDB{ 等待db.delete; 等待数据库打开; }
这里还有一个执行db.delete,然后执行db.open的命令。刚刚检查了my package.json,看起来我的版本是2.0.4。我还没有注意到v3的存在!除此之外,在迁移到v3时,我可能不再需要它,问题是如何向/a vuejs模块(如Dexie)添加您自己的函数。