database.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import Database from 'better-sqlite3';
  2. import config from '../config.js';
  3. import path from 'path';
  4. import { fileURLToPath } from 'url';
  5. const __dirname = path.dirname(fileURLToPath(import.meta.url));
  6. const PROJECT_ROOT = path.resolve(__dirname, '../../');
  7. const DB_PATH = path.join(PROJECT_ROOT, 'data', config.database.sqlite3.filename);
  8. let db = null;
  9. export function getSqlite3() {
  10. if (db) return db;
  11. const dbConfig = config.database.sqlite3;
  12. db = new Database(DB_PATH, {
  13. fileMustExist: dbConfig.fileMustExist,
  14. readonly: dbConfig.readonly,
  15. timeout: dbConfig.timeout
  16. });
  17. db.pragma(`foreign_keys = ${dbConfig.performance.foreignKeys ? 'ON' : 'OFF'}`);
  18. db.pragma(`journal_mode = ${dbConfig.performance.journalMode}`);
  19. db.pragma(`synchronous = ${dbConfig.performance.synchronous}`);
  20. db.pragma(`temp_store = ${dbConfig.performance.tempStore}`);
  21. return db;
  22. }
  23. export function closeSqlite3() {
  24. if (db) {
  25. try {
  26. db.close();
  27. db = null;
  28. } catch (err) {
  29. throw err;
  30. }
  31. }
  32. }