强制 NeDB 使用 Electron 创建本地文件

Force NeDB to create local file with Electron

我在我的 Electron 应用程序中使用 NeDB React.js 来持久存储一些任务和项目。我正在一个名为 Database.js.

的文件中初始化两个 DataStores
this.taskCollection = new Datastore({
        filename:'./tasks.json',
        autoload: true,
        timestampData: true,
    });

    this.projectCollection = new Datastore({
        filename:'./projects.json',
        autoload: true,
        timestampData: true,
    });

然后我将文件导入到我的 React-App 中。这发生在 Electron 的渲染器进程中。我使用 filename 属性 强制 NeDB 创建一个名为 tasks.jsonprojects.json 的两个本地文件。假设 NeDB 的文档应该在当前目录中创建两个提到的文件,但它们没有创建。 NeDB 仅创建 IndexedDB 数据存储,我真的不知道为什么会这样。有没有人建议为什么会这样?

提前致谢:)

编辑

当我在主进程中创建数据存储时,会创建文件。难道我在渲染器进程中没有访问文件系统的权限?

我也是 Electron 的新手,但据我从文档和教程中收集到的信息,与数据库的交互应该在主进程中完成。然后,您应该使用 ipc 或 remote 在渲染器进程和主进程之间进行通信。反正我就是这样设置的。

我使用 ipc 将带有查询等的事件从我的渲染器发送到我的主渲染器,然后以相同的方式将结果发回。这还允许您在应用程序的多个位置监听相同的数据更改。 (例如,当我从联系人中删除 'favourite' 状态时,该组件会更新,但我也可以同时在我最喜欢的列表中收听更新以重新加载它,以便它是最新的)

我是通过在 main.js 中创建数据存储并将其作为全局对象共享来实现的。所以我可以在渲染器进程中使用它,但它仍在创建一个 json 文件作为存储而不是 indexedDb 左右。

如果使用 vue-cli3,请在 vue.config.js 中添加此 webpack 选项:

configureWebpack: {
  target: 'electron-main'
}

然后将创建一个本地文件,而不是使用浏览器的 indexdb。

参见:https://webpack.js.org/configuration/target/