Dans cet article, nous analysons l'utilisation de Dexie dans Lobechat.
Si vous cochez [dossier de base de données dans lobechat, il contient 2 dossiers :
client
serveur
Dans cette documentation auto-hébergée de Lobechat, il est mentionné que LobeChat
par défaut, il utilise une base de données côté client (IndexedDB). C'est pourquoi vous disposez de deux dossiers, un pour le client et un pour le serveur.
database/client/core/db.ts importe Dexie.
Dexie est un wrapper minimaliste pour indexedDB. Regardons un exemple simple dexie fourni dans le didacticiel de mise en route.
// 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 };
Les applications ont généralement une seule instance Dexie déclarée comme son propre module. C'est ici que vous déclarez les tables dont vous avez besoin et comment chaque table doit être indexée. Une instance Dexie est un singleton dans tout le
application — vous n’avez pas besoin de la créer à la demande. Exportez l'instance de base de données résultante de votre module afin que les composants ou d'autres modules puissent l'utiliser pour interroger ou écrire dans la base de données.
En utilisant cette ligne ci-dessous, Lobechat crée une instance singleton de 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();
les versions écrites dans le constructeur montrent comment le schéma de la base de données côté client a évolué au fil du temps. En savoir plus sur Dexie.version() pour comprendre les versions.
Chez Thinkthroo, nous étudions les grands projets open source et fournissons des guides architecturaux. Nous avons développé des composants resubale, construits avec le vent arrière, que vous pouvez utiliser dans votre projet. Nous proposons des services de développement Next.js, React et Node.
Prenez rendez-vous avec nous pour discuter de votre projet.
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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!