NeDB(与Vue-Electron)无法保存本地数据库文件



我正在用NeDB开发Vue-Electron。 在使用 NeDB 时,我遇到了 NeDB 不保存本地文件的问题,尽管我设置了选项filenameautoload: true.

我在加载NeDB时尝试了db对象的输出日志,它正确的路径设置。

Datastore {inMemoryOnly: false,  
autoload: true,  
timestampData: false,  
filename: "./db/nedb.db", 
compareStrings: undefined, …}  
autoload: (...)compareStrings: (...)  
executor: Executorfilename: "./db/nedb.db"  
inMemoryOnly: falseindexes: Objectpersistence: PersistencetimestampData: ...

我看到了其他帖子。 但我不知道该怎么做Then in the renderer process get the datastore via Electron.RemoteNEDB 在 Electron 应用程序中的持久性

我认为可能会发生这种情况,因为 NeDB 需要在运行脚本之前存在文件。所以我尝试了touch nedb.db但没有用。

此外,其他奇怪的事情:我有另一个使用 NeDB 的 Vue 应用程序,并且显示了数据。但是我没有在该应用程序中设置数据库路径。此应用程序插入的数据在其他应用程序的数据库文件中不存在。

下面是我的代码。如果有人能帮助我。 谢谢。

const remote = require('electron').remote;
const app = remote.app;
const path = require('path');
var db = new nedb({
//filename: path.join(app.getPath('userData'), 'library.db'),
filename: './db/nedb.db',
autoload: true
});
let doc = {
dev: true,
message: 'test'
}
db.insert(doc);
db.find({}, function (err, docs) {
console.log(docs)
console.log(err)
})

如果从renderer进程调用,NeDB将默认为浏览器存储(IndexedDB(。 如果在main进程中创建,它将创建文件。 在github上看到这篇文章。

从帖子:

Nedb 允许您使用此调用创建新的自动加载数据存储:

let db = new Datastore({ filename: 'path/to/datafile', autoload: true });

但是,此命令似乎仅在执行时才准确 从主流程(对于新的 Electron 开发人员来说,这通常是 您的 main.ts 或 main.js 文件(。

如果从渲染器进程中执行的类(在浏览器窗口中执行的任何类(执行数据存储创建命令,nedb 将忽略您提供的数据文件,而是在 IndexedDB 中创建数据库。您可以在应用程序的"userData"目录中找到您的数据库(请参阅操作系统的文档( 如果确实希望 nedb 创建和使用在创建数据存储期间提供的数据库文件,则必须创建并访问数据文件(添加、删除,...文档(从主流程。

  1. 从主进程创建数据文件(在main.ts中(:

let collectionsDb: Datastore = new Datastore({ filename: path.join(app.getPath("userData"), "Collections.db"), autoload: true });

  1. 将 db 变量放在主进程的全局变量中(在 main.ts 中(:

const globalAny:any = global;

globalAny.collectionsDb = collectionsDb;

通过调用全局数据库变量从渲染器进程访问全局数据库变量: 从"电子"导入 { 远程 };

private db = remote.getGlobal('collectionDb');

另见OP所提问题的回答。

最新更新