我在电子应用程序中使用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.json
和projects.json
的两个本地文件。假设NeDB的文档应该在当前目录中创建两个提到的文件,但是不会创建它们。 NeDB只创建 IndexedDB 数据存储,我真的不知道为什么会这样。有谁有人建议为什么会这样?
提前致谢:)
修改
当我在主进程中创建数据存储时,将创建文件。可能是,我在渲染器进程中无法访问文件系统吗?
答案 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。