Yua*_* Ma 5 sqlite electron electron-packager
背景:
在我的应用程序,我有一个本地数据库文件,命名example.db
它是由读main.js
。项目结构和我的main.js
程序的一部分如下所示。
项目文件夹架构
主文件
const {
app,
BrowserWindow,
dialog,
Menu
} = require('electron')
const fs = require('fs')
const path = require('path')
const sqlite3 = require('sqlite3').verbose()
// load dataBase
let dbFile = 'app/db/example.db'
const db = new sqlite3.Database(dbFile)
Run Code Online (Sandbox Code Playgroud)
包.json
{
"name": "Example",
"version": "1.0.0",
"description": "",
"main": "./app/main.js",
"scripts": {
"postinstall": "install-app-deps",
"start": "electron ."
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"electron-builder": "^15.5.1",
"electron-prebuilt": "^1.4",
"electron-rebuild": "^1.5.7",
"electron-packager": "^8.1.0"
},
"dependencies": {
"jquery": "^3.1.1",
"sqlite3": "^3.1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
我可以通过运行 成功加载 DB 文件npm start
,但是,在我通过在Example
文件夹下运行以下命令行将我的程序成功打包到 Windows 平台后:
node_modules/.bin/electron-packager --platform=win32 --arch=x64 .
我运行了该.exe
文件,但系统显示找不到我的数据库文件。
尝试过的方法:
我尝试main.js
使用process.resourscesPath
以下方法修改 db 文件路径:
// load dataBase
let dbFile = path.join(process.resourcesPath, '/app/db/example.db')
const db = new sqlite3.Database(dbFile)
Run Code Online (Sandbox Code Playgroud)
但是,这样做之后,我既不能从 running 加载 DB 文件.exe
,也不能通过运行npm start
.
题:
我想知道存储我的数据库文件的正确方法是什么,以及如何在我的后端程序中写入它的路径(main.js
在本例中)。谢谢。
运行时.exe
,当前目录可能不同,因此相对路径将不正确。正如您发现的那样,您需要将完整路径放在一起,但process.resourcesPath
您不应该使用app.getAppPath()
.
let dbFile = path.join(app.getAppPath(), 'app', 'db', 'example.db')
Run Code Online (Sandbox Code Playgroud)
这应该是数据库文件的正确路径。您可能面临的另一个问题是,.exe
通常会使用Asar格式打包,它提供读访问权限但不提供写访问权限。因此,如果您需要写入数据库,最好将其放在其他地方。Electron.app.getPath(name) API提供了许多路径,例如,您可以app.getPath("userData")
用来获取为每个用户的应用程序数据提供的路径。在这种情况下,您的应用程序必须在该位置创建数据库文件。
归档时间: |
|
查看次数: |
3516 次 |
最近记录: |