詳解利用nodejs對(duì)本地json文件進(jìn)行增刪改查
哈嘍!nodejs的文件系統(tǒng),接觸過(guò)node的對(duì)node的文件系統(tǒng)肯定不會(huì)陌生,這兩天我就在思考一個(gè)問(wèn)題,我是否可以在本地操作我的本地json文件,這樣一個(gè)本地的文本數(shù)據(jù)庫(kù)就有了,如果是便簽之類,記錄的軟件,我完全可以不用連后臺(tái)的數(shù)據(jù)庫(kù),我可以自己操作本地的json文件,自己用node寫(xiě)后臺(tái),答案是肯定的,下面我們就一起來(lái)實(shí)現(xiàn)一下吧,對(duì)本地json文件的增、刪、改、查
1.增
首先我們先看一下demo的目錄結(jié)構(gòu)

我們看一下person.json的內(nèi)容

沒(méi)毛病,接下來(lái)就是見(jiàn)證奇跡的時(shí)刻了
下面寫(xiě)nodejs的代碼
var fs = require('fs');
var params = {
"id":5,
"name":"白眉鷹王"
}//在真實(shí)的開(kāi)發(fā)中id肯定是隨機(jī)生成的而且不會(huì)重復(fù)的,下一篇寫(xiě)如何生成隨機(jī)切不會(huì)重復(fù)的隨機(jī)數(shù),現(xiàn)在就模擬一下假數(shù)據(jù)
//寫(xiě)入json文件選項(xiàng)
function writeJson(params){
//現(xiàn)將json文件讀出來(lái)
fs.readFile('./mock/person.json',function(err,data){
if(err){
return console.error(err);
}
var person = data.toString();//將二進(jìn)制的數(shù)據(jù)轉(zhuǎn)換為字符串
person = JSON.parse(person);//將字符串轉(zhuǎn)換為json對(duì)象
person.data.push(params);//將傳來(lái)的對(duì)象push進(jìn)數(shù)組對(duì)象中
person.total = person.data.length;//定義一下總條數(shù),為以后的分頁(yè)打基礎(chǔ)
console.log(person.data);
var str = JSON.stringify(person);//因?yàn)閚odejs的寫(xiě)入文件只認(rèn)識(shí)字符串或者二進(jìn)制數(shù),所以把json對(duì)象轉(zhuǎn)換成字符串重新寫(xiě)入json文件中
fs.writeFile('./mock/person.json',str,function(err){
if(err){
console.error(err);
}
console.log('----------新增成功-------------');
})
})
}
writeJson(params)//執(zhí)行一下;
結(jié)果如下

下面我們來(lái)看一下json文件的結(jié)果

看,json文件已經(jīng)被新增進(jìn)來(lái)了
2.刪
var fs = require('fs');
//刪除json文件中的選項(xiàng)
function deleteJson(id){
fs.readFile('./mock/person.json',function(err,data){
if(err){
return console.error(err);
}
var person = data.toString();
person = JSON.parse(person);
//把數(shù)據(jù)讀出來(lái)刪除
for(var i = 0; i < person.data.length;i++){
if(id == person.data[i].id){
//console.log(person.data[i])
person.data.splice(i,1);
}
}
console.log(person.data);
person.total = person.data.length;
var str = JSON.stringify(person);
//然后再把數(shù)據(jù)寫(xiě)進(jìn)去
fs.writeFile('./mock/person.json',str,function(err){
if(err){
console.error(err);
}
console.log("----------刪除成功------------");
})
})
}
deleteJson(5);//執(zhí)行一下


第5個(gè)就刪除了
3.改
一開(kāi)始的json文件是這個(gè)樣子的

下面上代碼
var fs = require('fs');
var params = {
"name":"孫悟空"
}
function changeJson(id,params){
fs.readFile('./mock/person.json',function(err,data){
if(err){
console.error(err);
}
var person = data.toString();
person = JSON.parse(person);
//把數(shù)據(jù)讀出來(lái),然后進(jìn)行修改
for(var i = 0; i < person.data.length;i++){
if(id == person.data[i].id){
console.log('id一樣的');
for(var key in params){
if(person.data[i][key]){
person.data[i][key] = params[key];
}
}
}
}
person.total = person.data.length;
var str = JSON.stringify(person);
//console.log(str);
fs.writeFile('./mock/person.json',str,function(err){
if(err){
console.error(err);
}
console.log('--------------------修改成功');
console.log(person.data);
})
})
}
changeJson(3,params)//執(zhí)行一下;
結(jié)果如下

看一下json文件

修改成功?。。?!
4.查
現(xiàn)在模擬一下分頁(yè)
先看一下json文件長(zhǎng)什么樣

上代碼
var fs = require('fs');
//通過(guò)傳回來(lái)的頁(yè)數(shù),進(jìn)行分頁(yè)模擬
function pagination(p,s){
//p為頁(yè)數(shù),比如第一頁(yè)傳0,第二頁(yè)傳1,s為每頁(yè)多少條數(shù)據(jù)
fs.readFile('./mock/person.json',function(err,data){
if(err){
console.error(err);
}
var person = data.toString();
person = JSON.parse(person);
//把數(shù)據(jù)讀出來(lái)
//console.log(person.data);
var length = person.data.length;
var pagePerson = person.data.slice(s*p,(p+1)*s);
console.log('------------------------查詢成功pagePerson');
console.log(pagePerson);
})
}
pagination(0,6);//查詢第一頁(yè),每頁(yè)的數(shù)據(jù)條數(shù)為6條
執(zhí)行結(jié)果為

下面看一下第二頁(yè)
執(zhí)行pagination(1,6);
執(zhí)行結(jié)果為

以此類推,就實(shí)現(xiàn)了模擬分頁(yè)的效果
5.總結(jié)
ok,一套基本的增刪改查就這樣寫(xiě)完了,感覺(jué)node還是特別強(qiáng)大的,感覺(jué)自己又進(jìn)步了一些,雖然可能有人覺(jué)得這樣寫(xiě)沒(méi)有意義,也許吧,但是我覺(jué)得很有意義,讓我也收獲了不少?。?!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
NodeJS 實(shí)現(xiàn)手機(jī)短信驗(yàn)證模塊阿里大于功能
這篇文章主要介紹了NodeJS 實(shí)現(xiàn)手機(jī)短信驗(yàn)證模塊阿里大于功能,需要的朋友可以參考下2017-06-06
使用travis-ci如何持續(xù)部署node.js應(yīng)用詳解
最近在學(xué)習(xí)使用 travis-ci 對(duì)項(xiàng)目進(jìn)行持續(xù)集成測(cè)試,所以下面這篇文章主要給大家介紹了關(guān)于使用travis-ci如何持續(xù)部署node.js應(yīng)用的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07
node.js中的fs.appendFileSync方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.appendFileSync方法使用說(shuō)明,本文介紹了fs.appendFileSync方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
nodejs操作mongodb的填刪改查模塊的制作及引入實(shí)例
下面小編就為大家分享一篇nodejs操作mongodb的填刪改查模塊的制作及引入實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
node實(shí)現(xiàn)批量上傳本地圖片轉(zhuǎn)為圖片CDN的項(xiàng)目實(shí)踐
本文主要介紹了node實(shí)現(xiàn)批量上傳本地圖片轉(zhuǎn)為圖片CDN的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
NodeJS學(xué)習(xí)筆記之Connect中間件模塊(二)
本文續(xù)上文的內(nèi)容,介紹下nodejs中connect中間件的使用方式及用途,希望大家喜歡。2015-01-01
Nodejs實(shí)現(xiàn)的操作MongoDB數(shù)據(jù)庫(kù)功能完整示例
這篇文章主要介紹了Nodejs實(shí)現(xiàn)的操作MongoDB數(shù)據(jù)庫(kù)功能,結(jié)合完整實(shí)例形式分析了nodejs針對(duì)MongoDB數(shù)據(jù)庫(kù)的連接及增刪改查基本操作技巧,需要的朋友可以參考下2019-02-02
nodejs檢測(cè)因特網(wǎng)是否斷開(kāi)的解決方案
這篇文章主要給大家介紹了關(guān)于nodejs如何檢測(cè)因特網(wǎng)是否斷開(kāi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用nodejs具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
nodejs中關(guān)于mysql數(shù)據(jù)庫(kù)的操作
這篇文章主要介紹了nodejs中關(guān)于mysql數(shù)據(jù)庫(kù)的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

