【问题标题】:sqlite3 db file not created immediately after app installation - react electron JS应用程序安装后未立即创建 sqlite3 db 文件 - 反应电子 JS
【发布时间】:2022-10-30 15:57:00
【问题描述】:

我正在使用 React 和 Electron JS 和使用 sqlite3 的数据库文件创建一个 Windows 应用程序。我将数据库文件保存在根文件夹的“/databases”文件夹中。我注意到的一件事是 database.db 文件仅在我在开发模式下运行“npm start”后创建。

当我使用 electron-builder 构建应用程序时,应用程序的创建没有任何问题。问题是,第一次安装应用程序后,除了 db 文件之外的所有文件都被创建。该应用程序在安装后会自动打开。由于未创建 db 文件,因此会引发类似“无法读取数据库”的错误。一旦我关闭应用程序并通过打开 .exe 文件重新打开它,就会创建数据库文件夹和文件。我需要将 DB 文件与构建的根文件夹中的构建打包在一起,而不是在电子的 /build/resources/dist 文件夹中。任何帮助,将不胜感激。

下面是我的 package.json:

"build": {
    "appId": "com.electron",
    "files": [
      "dist/electron.js",
      "dist/index.html",
      "dist/main.js",
      "dist/images",
      "dist/preload.js",
      "dist/**"
    ],
    "extraResources": [{
      "from": "./databases/",
      "to": "databases/",
      "filter": [
        "**/*"
      ]
    }],
    "directories": {
      "output": "./electron"
    },
    "electronDownload": {
      "cache": "./electron/cache"
    },
    "win": {
      "target": "msi",
      "icon": "./src/assets/images/icon.png"
    },
    "asar": false
  }

下面是我在 electron.js 中处理数据库创建的方式:

const dbName = 'mydatabase.db';
const dbPath = path.join(path.dirname(__dirname), 'databases');
const fullDbPath = path.join(dbPath, dbName);

if(!fs.existsSync(dbPath)) {
  fs.mkdirSync(dbPath, { recursive: true });
}

【问题讨论】:

  • 你有没有找到处理它的方法?

标签: node.js reactjs electron electron-builder node-sqlite3


【解决方案1】:

构建电子应用程序时,.db 文件也有同样的问题。我尝试使用 Knex.js 来处理它。 Knex.js guid 说你必须为 sqlit3 或 better-sqlit 定义 Knex,如下所示:

const knex = require('knex')({
  client: 'sqlite3', // or 'better-sqlite3'
  connection: {
    filename: "./mydb.sqlite"
  }
});

所以你需要一个 .sqlite 文件在你的公共文件夹中,即使在构建你的项目之后它也可以使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-12
    • 2020-04-02
    • 1970-01-01
    • 2018-10-26
    • 2017-03-12
    • 1970-01-01
    • 2019-01-09
    • 2018-03-23
    相关资源
    最近更新 更多