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

时间:2016-12-19 19:51:48

标签: reactjs electron nedb

我在电子应用程序中使用NeDB和React.js一起存储一些任务和项目。我正在一个名为Database.js的文件中初始化两个DataStore。

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 数据存储,我真的不知道为什么会这样。有谁有人建议为什么会这样?

提前致谢:)

修改

当我在主进程中创建数据存储时,将创建文件。可能是,我在渲染器进程中无法访问文件系统吗?

3 个答案:

答案 0 :(得分:2)

我对Electron也很新,但据我从docs&教程,与数据库的交互应该在主过程中完成。然后,您应该使用ipc或remote在渲染器进程和主进程之间进行通信。这就是我设置它的方式。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果使用vue-cli3,请在var component; var gauge; function createRect() { component = Qt.createComponent("rect.qml"); if (component.status === Component.Ready){ finishCreation(); } else { component.statusChanged.connect(finishCreation); console.log("component not ready!"); } } function finishCreation() { if (component.status === Component.Ready) { gauge = component.createObject(mainWindow); if (gauge === null) { // Error Handling console.log("Error creating object"); } } else if (component.status === Component.Error) { // Error Handling console.log("Error loading component:", component.errorString()); } } 中添加此webpack选项:

vue.config.js

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

请参阅:https://webpack.js.org/configuration/target/