electron应用操作数据的几种方法:
1、远程api接口 (多个客户端公用一套数据) *
2、连接远程数据库 (局域网内使用 多个客户端公用一套数据 ) (不建议使用)
3、连接本地数据库 (nedb sqlite) 应用本地保存数据(localstore 5M) 用户设置信息 qq聊天记录
electron-vue读写本地数据库文件
https://simulatedgreg.gitbooks.io/electron-vue/content/cn/savingreading-local-files.html
electron app模块详细:
https://www.w3cschool.cn/electronmanual/electronmanual-electronapp.html
Nedb 数据库文档:
https://github.com/louischatriot/nedb
nedb数据库和mongodb数据库的操作方法几乎一模一样。
electron-vue中使用Nedb 数据库。
1、安装nedb数据库
cnpm install nedb --save
2、新建一个src/render/datastore.js
import Datastore from 'nedb'
import path from 'path'
import { remote } from 'electron'
export default new Datastore({
autoload: true,
filename: path.join(remote.app.getPath('userData'), '/data.db')
})
3、src/renderer/main.js
import db from './datastore.js'
/* 其它代码 */
Vue.prototype.$db = db
4、在vue的组件里面实现数据的增加 修改 删除 显示
this.$db.insert({},function(){
})
this.$db.find({},function(){
//获取查询的数据
})
this.$db.update({条件},{$set:{更改的数据}},function(){
})
this.$db.remove({条件},{},function(){
})
示例代码:
home.vue
<template>
<div id="home">
<input type="text" v-model="name" placeholder="姓名"/>
<input type="text" v-model="age" placeholder="年龄"/>
<br>
<button @click="addData()">增加数据</button>
<br>
<br>
<button @click="updateData()">编辑数据</button>
<br>
<br>
<button @click="deleteData()">删除数据</button>
<br><br><br>
<button @click="findData()">查找数据</button>
<br>
<ul>
<li v-for="item in list">
{{item._id}}-- {{item.name}}-----{{item.age}}
</li>
</ul>
</div>
</template>
<script>
export default{
data(){
return {
msg:'首页组件',
name:'',
age:'',
list:[]
}
},
methods:{
findData(){
//查找数据
// this.$db.find({"age":30}, (err, docs)=>{
// if(err){
// console.log(err);
// return;
// }
// console.log(docs);
// this.list=docs;
// })
this.$db.find({}, (err, docs)=>{
if(err){
console.log(err);
return;
}
console.log(docs);
this.list=docs;
})
},
addData(){
//获取表单数据
console.log(this.name,this.age);
//https://github.com/louischatriot/nedb
this.$db.insert({"name":this.name,"age":this.age},function(err,doc){
if(err){
console.log(err);
return;
}
console.log(doc);
})
},
updateData(){
// this.$db.update({"name":"wangwu","age":30},{$set:{"name":"王五"}},function(err,data){
// if(err){
// console.log(err);
// return;
// }
// console.log(data);
// })
this.$db.update({"_id":"cHODtJOIft1YcOMN"},{$set:{"name":"赵六"}},function(err,data){
if(err){
console.log(err);
return;
}
console.log(data);
})
},
deleteData(){
this.$db.remove({"_id":"6nAYPLImXRs7mB0P"},{},function(err,data){
if(err){
console.log(err);
return;
}
console.log(data);
})
}
}
}
</script>
new.vue
<template> <div id="news"> 新闻组件 <br> <button @click="runNode()">使用nodejs的fs模块</button> <ul> <li v-for="item in list"> {{item._id}}-- {{item.name}}-----{{item.age}} </li> </ul> </div> </template> <script> var fs=require('fs'); export default{ data(){ return { msg:'我是新闻页面', list:[] } }, methods:{ runNode(){ fs.readFile('package.json',(err,data)=>{ if(err){ console.log(err); return; } console.log(data.toString()); }) } }, mounted() { this.$db.find({}, (err, docs)=>{ if(err){ console.log(err); return; } console.log(docs); this.list=docs; }) } } </script>
datastore.js
import Datastore from 'nedb'; import path from 'path'; import { remote } from 'electron'; export default new Datastore({ autoload: true, filename: path.join(remote.app.getPath('userData'), '/data.db') //指定数据库文件路径 // 路径参考https://www.w3cschool.cn/electronmanual/electronmanual-electronapp.html })
main.js
import Vue from 'vue' import axios from 'axios' import App from './App' import router from './router' //实例化db库 import db from './datastore.js'
/* 其它代码 */ Vue.prototype.$db = db; if (!process.env.IS_WEB) Vue.use(require('vue-electron')) Vue.http = Vue.prototype.$http = axios Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ components: { App }, router, template: '<App/>' }).$mount('#app')