nodeJs实现本地数据库json格式储存增删改查
nodeJs实现本地数据库json格式储存增删改查概述增删改查注意事项(踩坑)当写入的时候不存在文件,则自动创建文件的方法概述nodeJs实现本地数据库、nodeJs中fs.writeFile的坑在写一个移动端vue项目的时候突发奇想,既然MongoDB 存储的json 格式的数据,那能不能在写接口的时候在接口文件中 直接创建一个db 文件 储存 数据呢? 学过 nodeJsfs模块的同学或许不知
·
概述
nodeJs实现本地数据库、 nodeJs中fs.writeFile的坑
在写一个移动端vue项目的时候突发奇想,既然MongoDB 存储的json 格式的数据,那能不能在写接口的时候在接口文件中 直接创建一个db 文件 储存 数据呢? 学过 nodeJs fs模块的同学或许不知道它的强大, 通过fs 模块,我们完全可以实现 数据的增删改查,下面 直接上代码吧。
先看一下目录结构
增
下面说得很详细了,还有疑惑的小伙伴可以在评论区艾特俺哦,会及时回复的。
/* json 增
*@params 写入的内容
*@path_way 写入的文件 路径
*/
let writeJson = (params, path_way) => {
// 现将json文件读出来
fs.readFile(path_way, (err, data) => {
if (err) {
return console.error("读取失败:", err);
}
let person = data.toString(); //将二进制数据转为字符串
person = JSON.parse(person); //将字符串转换为json 对象
person.data.push(params); //将传来的对象 push 进数组对象中
person.total = person.data.length;//定义一下总条数, 为以后的分页打基础
console.log(person.data);
// 因为 nodejs 的写入文件 只认识字符串 或 二进制数,
// 所以把 json 对象转换成字符串重新写入 json 文件中
let str = JSON.stringify(person);
fs.writeFile(path_way, str, err => {
if (err) {
console.error("重写失败:", err);
}
console.log('---------- 新增成功 -----------');
})
})
};
// writeJson(params, './db/pet/pet/pet.json');
删
/* json 删
* @id 要删除的对象的 id
* @path_way 删除的对象的 文件路径
*/
let deleteJson = (id, path_way) => {
fs.readFile(path_way, (err, data) => {
if (err) {
return console.error("读取失败:", err);
}
let person = data.toString();
person = JSON.parse(person);
// 把数据读出来 删除
let temp = person.data.some((val, index) => {
if (id == val.id) {
person.data.splice(index, 1);
}
return id == val.id;
})
if (!temp) {
console.log('---------- 没有该 id -----------');
return false;
}
// console.log(person.data);
person.total = person.data.length;
let str = JSON.stringify(person);
// 然后再把数据重写进去
fs.writeFile(path_way, str, err => {
if (err) {
console.error("重写失败:", err);
}
console.log('---------- 删除成功 -----------');
})
})
};
// deleteJson(3, './db/pet/pet.json');
改
/* json 修改 */
let changeJson = (params, path_way) => {
fs.readFile(path_way, (err, data) => {
if (err) {
return console.error("读取失败:", err);
}
let person = data.toString();
person = JSON.parse(person);
// 把数据读出来 修改
let temp = person.data.some(val => {
// 如果 id 相同 进行覆盖, 否则 push 进去
if (params.id == val.id) {
// 遍历 params
for (let key in params) {
if (val[key]) {
val[key] = params[key];
}
}
}
// 判断是否存在该 id 对象
return params.id == val.id;
})
if (!temp) {
console.log('---------- 不存在该 id对象,追加成功 -----------');
person.data.push(params);
}
person.total = person.data.length;
let str = JSON.stringify(person);
// 然后再把数据重写进去
fs.writeFile(path_way, str, err => {
if (err) {
console.error("重写失败:", err);
}
console.log('---------- 修改成功 -----------');
})
})
};
// changeJson(params, './db/pet/pet.json');
查
/* json 查 通过传回来的页数,获取 ((p - 1) * s, p * s) 之间的数据
*@p 页数
*@s 每页多少条数据
*@path_way json文件路径
*/
let pagination = (p, s, path_way) => {
return (
// 这里建议用同步方法,否则查询的时候会出现代码覆盖为undefined 的问题,
// 同步方法默认 返回 buffer 类型 , 通过设置 utf-8 修改返回的类型
fs.readFileSync(path_way, 'utf-8', (err, data) => {
if (err) {
return console.error("读取失败:", err);
}
let person = data.toString();
person = JSON.parse(person);
console.log(person)
// 读出数据
let pagePerson = person.data.slice((p - 1) * s, p * s);
console.log('---------- 查询成功 -----------', pagePerson)
return pagePerson;
})
)
}
// pagination(1, 3, './db/pet/pet.json');
注意事项(踩坑)
1、这里的 fs.writeFile 必须是异步的,当使用fs.writeFileSync 同步方法时,由于windows 系统的安全策略,会导致存不进去 报错。
2、可以写一段代码自行测试一下,细节要点大部分都 附在代码片段中了。
当写入的时候不存在文件,则自动创建文件的方法
链接: nodejs判断文件、文件是否存在,自动创建.
·
❤
🧡
如果觉得有用的话可以点个赞哦! 欢迎大牛们评论区交流 !
更多推荐
已为社区贡献2条内容
所有评论(0)