Heim >Web-Frontend >js-Tutorial >Verwendung von Dexie, einem IndexedDB-Wrapper, in Lobechat

Verwendung von Dexie, einem IndexedDB-Wrapper, in Lobechat

DDD
DDDOriginal
2024-10-29 07:16:30995Durchsuche

In diesem Artikel analysieren wir die Dexie-Nutzung in Lobechat.

Wenn Sie [Datenbankordner in Lobechat überprüfen, gibt es zwei Ordner:

  1. Kunde

  2. Server

In diesen Lobechat-Selbsthost-Dokumenten wird erwähnt, dass LobeChat

Standardmäßig wird eine clientseitige Datenbank (IndexedDB) verwendet. Aus diesem Grund haben Sie zwei Ordner, einen für den Client und einen für den Server.

Usage of Dexie, an IndexedDB wrapper, in Lobechat

Usage of Dexie, an IndexedDB wrapper, in Lobechat

database/client/core/db.ts importiert Dexie.

Dexie ist ein minimalistischer Wrapper für indexedDB. Schauen wir uns ein einfaches Dexie-Beispiel an, das im Tutorial „Erste Schritte“ bereitgestellt wird.

// db.ts
import Dexie, { type EntityTable } from 'dexie';
interface Friend {
 id: number;
 name: string;
 age: number;
}
const db = new Dexie('FriendsDatabase') as Dexie & {
 friends: EntityTable<
 Friend,
 'id' // primary key "id" (for the typings only)
 >;
};
// Schema declaration:
db.version(1).stores({
 friends: '++id, name, age' // primary key "id" (for the runtime!)
});
export type { Friend };
export { db };

Wichtiger Hinweis:

Anwendungen haben normalerweise eine einzelne Dexie-Instanz, die als eigenes Modul deklariert ist. Hier legen Sie fest, welche Tabellen Sie benötigen und wie jede Tabelle indiziert werden soll. Eine Dexie-Instanz ist im gesamten

ein Singleton Anwendung – Sie müssen sie nicht bei Bedarf erstellen. Exportieren Sie die resultierende Datenbankinstanz aus Ihrem Modul, damit Komponenten oder andere Module sie zum Abfragen oder Schreiben in die Datenbank verwenden können.

Mithilfe dieser unten gezeigten Zeile erstellt Lobechat eine Singleton-Instanz von BrowserDB.

export class BrowserDB extends Dexie {
 public files: BrowserDBTable<'files'>;
 public sessions: BrowserDBTable<'sessions'>;
 public messages: BrowserDBTable<'messages'>;
 public topics: BrowserDBTable<'topics'>;
 public plugins: BrowserDBTable<'plugins'>;
 public sessionGroups: BrowserDBTable<'sessionGroups'>;
 public users: BrowserDBTable<'users'>;
constructor() {
 this.version(1).stores(dbSchemaV1);
 this.version(2).stores(dbSchemaV2);
 this.version(3).stores(dbSchemaV3);
 this.version(4)
 .stores(dbSchemaV4)
 .upgrade((trans) => this.upgradeToV4(trans));
 // … more code
export const browserDB = new BrowserDB();

Im Konstruktor geschriebene Versionen zeigen, wie sich das clientseitige Datenbankschema im Laufe der Zeit entwickelt hat. Lesen Sie mehr über Dexie.version(), um die Versionen zu verstehen.

Über uns:

Bei Thinkthroo studieren wir große Open-Source-Projekte und stellen Architekturführer zur Verfügung. Wir haben mit Rückenwind resubale Komponenten entwickelt, die Sie in Ihrem Projekt nutzen können. Wir bieten Next.js-, React- und Node-Entwicklungsdienste an.

Buchen Sie einen Termin mit uns, um Ihr Projekt zu besprechen.

Usage of Dexie, an IndexedDB wrapper, in Lobechat

Usage of Dexie, an IndexedDB wrapper, in Lobechat

Referenzen:

  1. https://github.com/lobehub/lobe-chat/blob/main/src/database/client/core/db.ts

  2. https://dexie.org/

  3. https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB

  4. https://web.dev/articles/indexeddb

  5. https://lobehub.com/docs/self-hosting/server-database

  6. https://dexie.org/docs/Tutorial/React

Das obige ist der detaillierte Inhalt vonVerwendung von Dexie, einem IndexedDB-Wrapper, in Lobechat. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn