封装 db.js(文章nedb版本^1.8.0)
// db.js
// 导入 NeDB 模块
const Datastore = require('nedb')
// 创建数据库实例,最大600M或100W行
const db = new Datastore({ filename: './database.db', autoload: true, inMemoryOnly: false, maxFileSize: 600 * 1024 * 1024, maxDocs: 10000000 })
// 插入数据函数
function insertData (data, callback) {
db.insert(data, callback)
}
// 查询数据函数
function findData (query, callback) {
db.find(query, callback)
}
// 查询数据函数 排序
function findSortData (query, sortOptions, callback) {
db.find(query, { sort: sortOptions }, callback)
}
// 更新数据函数
function updateData (query, update, options, callback) {
db.update(query, update, options, callback)
}
// 删除数据
function removeData (query, callback) {
// 调用 NeDB 的 remove 方法
db.remove(query, { multi: true }, function (err, numRemoved) {
if (err) {
callback(err)
} else {
callback(null, numRemoved)
}
})
}
// 导出数据库操作函数
module.exports = {
insertData,
findData,
findSortData,
updateData,
removeData
}
main.js中全局注册
import database from './utils/db'
Vue.prototype.$database = database
使用示例-存储
// 存储
ipValueChange(ip) {
// console.log("选中ip变更", ip);
this.deleteIpOption(ip).then(() => {
let newData = {
type: 'config',
ip: ip,
}
this.$database.insertData(newData, (err, newDoc) => {
if (err) {
console.error(`插入ip: ${ip} 失败:`, err);
} else {
console.log(`插入ip: ${ip} 成功:`, newDoc);
this.getIpOptions();
}
});
})
},
使用示例-查询
// 查询
getIpOptions() {
let query = { type: "config" };
this.$database.findData(query, (err, config) => {
if (err) {
console.error(`查询ip数据失败:`, err);
} else {
console.log(`查询ip数据成功:`, config);
}
});
},
使用示例-删除
// 删除
async deleteIpOption(ip) {
let query = {
type: "config",
ip: ip,
}
return new Promise((resolve, reject) => {
this.$database.removeData(query, (err, data) => {
if (err) {
console.log(`删除ip: ${ip} 失败`);
reject(err);
} else {
console.log(`删除ip: ${ip} 成功`);
resolve(data);
}
});
});
},