Heim >Web-Frontend >js-Tutorial >Verwendung von Dexie, einem IndexedDB-Wrapper, in Lobechat
In diesem Artikel analysieren wir die Dexie-Nutzung in Lobechat.
Wenn Sie [Datenbankordner in Lobechat überprüfen, gibt es zwei Ordner:
Kunde
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.
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 };
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.
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.
https://github.com/lobehub/lobe-chat/blob/main/src/database/client/core/db.ts
https://dexie.org/
https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB
https://web.dev/articles/indexeddb
https://lobehub.com/docs/self-hosting/server-database
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!