我有一个向indexedDB数据库添加条目的函数:
const dbParams = {
// Update this when changing the db schema
dbVersion: 1,
// Database, object store names
databaseName: "CropViewConfigData",
datesConfigStoreName: "datesConfig"
};
// Create db instance
const db = new dexie(dbParams.databaseName);
// Define db schema
db.version(dbParams.dbVersion).stores({
// First param is primaryKey followed by indexes
[dbParams.datesConfigStoreName]: ",name, *fields"
});
// Open the database
db.open().catch(function(e) {
console.error("Failed opening indexedDb");
});
// Store a new configuration into the database
export async function storeDateConfig(name, fields) {
// Throw error if name is not defined
if (!name || name === "") {
throw new nameException("Config name is not valid");
}
// Throw error if no fields
if (!fields || fields.length < 0) {
throw new fieldsException("Fields data is not valid");
}
// Throw error if name already exists
const savedConfig = await db.datesConfig.get(name);
if (savedConfig) {
throw new nameException("Name already exists");
}
// Add data to db
await db.datesConfig.add({ fields: fields }, [name]);
}
现在根据文档,",name, *fields"
应该表示主键既不是入站密钥也不是自动递增的,&#39;字段&#39;包含一组键(*)
所以我应该能够将密钥传递给.add
函数?
但是我收到了这个错误:
消息:&#34;无法执行&#39;添加&#39; on&#39; IDBObjectStore&#39;:对象存储 使用内联键并提供了关键参数。&#34; 名:&#34; DataError&#34;
我做错了什么?
答案 0 :(得分:0)
检查您的架构是否与创建的数据库同步。可能是您的架构曾经有入站密钥而且您在更改架构后更改了代码?如果你这样做会发生什么
Dexie.delete(dbParams.databaseName).then(() => {
... your code
})