IndexedDB не создает новое хранилище объектов - PullRequest
0 голосов
/ 02 августа 2020

Я использую response-indexed-db библиотеку для обработки indexedDB браузера для хранения некоторых данных.

Сначала я опубликовал свой веб-сайт с одним хранилищем объектов: - src / config / DBConfig. js

export const DBConfig = {
  name: "bookDB",
  version: 1,
  objectStoresMeta: [
    {
      store: "reads",
      storeConfig: { keyPath: "hash", autoIncrement: false },
      storeSchema: [
        { name: "hash", keypath: "hash", options: { unique: true } },
        { name: "token", keypath: "token", options: { unique: true } },
        { name: "sa", keypath: "sa", options: { unique: false } },
        { name: "ss", keypath: "ss", options: { unique: false } },
      ],
    }
  ],
};

И сегодня я добавил новое хранилище объектов в ту же базу данных: -

export const DBConfig = {
  name: "bookDB",
  version: 1,
  objectStoresMeta: [
    {
      store: "reads",
      storeConfig: { keyPath: "hash", autoIncrement: false },
      storeSchema: [
        { name: "hash", keypath: "hash", options: { unique: true } },
        { name: "token", keypath: "token", options: { unique: true } },
        { name: "sa", keypath: "sa", options: { unique: false } },
        { name: "ss", keypath: "ss", options: { unique: false } },
      ],
    },
    {
      store: "books",
      storeConfig: { keyPath: "hash", autoIncrement: false },
      storeSchema: [
        { name: "hash", keypath: "hash", options: { unique: true } },
        { name: "token", keypath: "token", options: { unique: true } },
      ],
    },
  ],
};

Пример файла того, как я вызываю оба объекта базы данных: -

import React, { useEffect, useState } from "react";
import axios from "axios";
import { initDB, useIndexedDB } from "react-indexed-db";
import { DBConfig } from "../config/DBConfig";

initDB(DBConfig);

const BookRead = (props) => {
  const readsObject = useIndexedDB("reads");
  const booksObject = useIndexedDB("books");

  const [storedRead, setStoredRead] = useState();
  const [data, setData] = useState();

  useEffect(() => {
    readsObject
      .getByIndex("hash", props.match.params.id)
      .then((data) => {
        setStoredRead(data);
      })
      .catch((e) => {});
  }, []);

  const readRequest = (token) => {
    axios
      .post(`${process.env.REACT_APP_API_URL}book/read`, {
        name: readerName(),
        token: token,
      })
      .then((res) => {
        if (res.data.token) {
          booksObject.add({
            hash: props.match.params.id,
            token: res.data.token,
          });

          readsObject.add({
            hash: props.match.params.id,
            token: res.data.token,
            ss: "",
            sa: "",
          });
        } else {
          setData(res.data);
        }
      })
      .catch((error) => {
        console.log(error);
      });
  };

  return <div>Book Content</div>;
};

export default BookRead;

Теперь в некоторых браузерах я вижу, что новое хранилище объектов «книги» создается, а в некоторых еще не создано.

Связано ли это с версией схемы indexedDB?

1 Ответ

0 голосов
/ 03 августа 2020

Исправлено при смене версии с 1 на 2: -

export const DBConfig = {
  name: "bookDB",
  version: 2,
  objectStoresMeta: [
    {
      store: "reads",
      storeConfig: { keyPath: "hash", autoIncrement: false },
      storeSchema: [
        { name: "hash", keypath: "hash", options: { unique: true } },
        { name: "token", keypath: "token", options: { unique: true } },
        { name: "sa", keypath: "sa", options: { unique: false } },
        { name: "ss", keypath: "ss", options: { unique: false } },
      ],
    },
    {
      store: "books",
      storeConfig: { keyPath: "hash", autoIncrement: false },
      storeSchema: [
        { name: "hash", keypath: "hash", options: { unique: true } },
        { name: "token", keypath: "token", options: { unique: true } },
      ],
    },
  ],
};
...