«Параметр keyPath не является допустимым путем ключа» при попытке назначить ключ keyPath с переменной - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть некоторый JSON, который выглядит следующим образом, который объявлен как переменная с именем "jsonObjSuper":

{
"Watchlist": "My Watchlist",
"Instruments": {
"instrument1": [
  "Company ABC",
  [
    {
      "snapshotTimeUTC": "2018-11-01T00:00:00",
      "snapshotTime": "2018/11/01 00:00:00"
    }
  ]
],
"instrument2": [
  "Company XYZ",
  [
    {
      "snapshotTimeUTC": "2018-11-01T00:00:00",
      "snapshotTime": "2018/11/01 00:00:00"
    }
  ]
]
}
}

Я пытаюсь назначить keyPath для IndexedDB, используя «Список наблюдения» - код ниже:

request.onupgradeneeded = function(event) {
var db = event.target.result;
var key = jsonObjSuper["Watchlist"]
var objectStore = db.createObjectStore("instruments", { keyPath: key});
}

но когда я пытаюсь это сделать, я получаю эту ошибку:

"Uncaught DOMException: не удалось выполнить 'createObjectStore' для 'IDBDatabase': опция keyPath не является допустимым путем ключа."

Если я создаю файл console.log для переменной «key», то значение, которое просматривается, будет «My Watchlist», как и ожидалось.

Я также попытался JSON.stringify переменной «ключ», чтобы увидеть, если это что-то изменило, но все равно есть ошибка.

Что может быть причиной?

Большое спасибо

1 Ответ

0 голосов
/ 14 ноября 2018

Учитывая ваш код:

var key = jsonObjSuper["Watchlist"]
var objectStore = db.createObjectStore("instruments", { keyPath: key});

И определение данных:

jsonObjSuper = {
    "Watchlist": "My Watchlist",
    ...
}

Вы фактически делаете:

db.createObjectStore("instruments", { keyPath: "My Watchlist"});

"My Watchlist" не являетсядопустимый путь к ключу.Ключевой путь для хранилища объектов должен быть строкой, которая является допустимым идентификатором JS, или последовательностью идентификаторов, разделенных точками, или пустой строкой, или массивом из одного или нескольких предыдущих.(См. https://w3c.github.io/IndexedDB/#key-path-construct для точного определения.) Таким образом, "My_Watchlist" будет действительным, но "My Watchlist" - нет.

...