Jelajahi Sumber

fix: Node < 22.5 时明确返回 sqlite-unavailable(前端提示升级而非笼统的连接失败)

liangzhao 2 minggu lalu
induk
melakukan
9ed909fe00
1 mengubah file dengan 10 tambahan dan 1 penghapusan
  1. 10 1
      server/stores/ops-sqlite.js

+ 10 - 1
server/stores/ops-sqlite.js

@@ -97,7 +97,16 @@ function createSqliteStore({ file }) {
   function open() {
     if (db) return db;
     fs.mkdirSync(path.dirname(dbFile), { recursive: true });
-    const { DatabaseSync } = require('node:sqlite');
+    let DatabaseSync;
+    try {
+      ({ DatabaseSync } = require('node:sqlite'));
+    } catch (e) {
+      // Node < 22.5 没有内置 sqlite:单独给一个可读原因,前端据此提示升级 Node
+      const err = new Error(`当前 Node 版本不支持内置 SQLite(需要 22.5 及以上,当前 ${process.version})`);
+      err.reason = 'sqlite-unavailable';
+      err.cause = e;
+      throw err;
+    }
     db = new DatabaseSync(dbFile);
     db.exec('PRAGMA journal_mode = WAL');
     db.exec('PRAGMA busy_timeout = 5000');