将密钥传递给.add()时出现Dexie.dataError

时间:2017-11-03 11:52:17

标签: javascript indexeddb dexie

我有一个向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;

我做错了什么?

1 个答案:

答案 0 :(得分:0)

检查您的架构是否与创建的数据库同步。可能是您的架构曾经有入站密钥而且您在更改架构后更改了代码?如果你这样做会发生什么

Dexie.delete(dbParams.databaseName).then(() => {
 ... your code
})