国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

基于Koa(nodejs框架)對json文件進行增刪改查的示例代碼

2019-11-19 12:10:46
字體:
來源:轉載
供稿:網友

想使用nodejs(koa)搭建一個完整的前后端,完成數據的增刪改查,又不想使用數據庫,那使用json文件吧。

本文介紹了基于koa的json文件的增、刪、改、查。

代碼準備

const Koa = require('koa')const bodyParser = require('koa-bodyparser')const Router = require('koa-router')const fs = require('fs')const path = require('path')const app = new Koa()const router = new Router()app.use(bodyParser())// 路由const deploy = new Router()// 增刪改查接口,可添加在下面// 裝載所有子路由router.use('/deploy', deploy.routes(), deploy.allowedMethods())app.use(router.routes()).use(router.allowedMethods())app.listen(3000);

json示例

[ {"id": 1, "name": "唐僧"}, {"id": 2, "name": "孫悟空"}, {"id": 3, "name": "豬八戒"}, {"id": 4, "name": "沙和尚"}]

1.新增和修改

新增和修改可以分開,但是為了省代碼就合并在一起了。

deploy.post('/add-modify', async (ctx) => {// 這里使用的bodyParser來解析post請求傳來的數據,id是用來查找之前有的數據并進行修改,新增數據的在前臺應該將id設置為空  let id = ctx.request.body.id  let params = ctx.request.body.params  let writeJson = () => {    return new Promise((resolve,reject)=>{    // fs模塊讀取json文件 對fs、path模塊不熟悉的可以去查下官方文檔      fs.readFile(path.join(__dirname, '/data/project.json'),function(err,data){        if(err){        // 報錯返回          resolve({code: -1, msg: '新增失敗' + err})          return console.error(err);        }        let jsonData = data.toString();//將二進制的數據轉換為字符串        jsonData = JSON.parse(jsonData);//將字符串轉換為json對象        // 有id值=>修改 無id值=>新增        if (id) {          jsonData.splice(jsonData.findIndex(item => item.id === id), 1, params)        } else {        // 有重復 => 返回-1 無重復 => 將params加到json數組末尾          let hasRepeat = jsonData.filter((item) => item.id === params.id);          hasRepeat ? resolve({code: -1, msg: '新增失敗,有重復項目id'}) : jsonData.push(params);        }        //因為nodejs的寫入文件只認識字符串或者二進制數,所以把json對象轉換成字符串重新寫入json文件中        let str = JSON.stringify(jsonData);        fs.writeFile(path.join(__dirname, '/data/project.json'),str,function(err){          if(err){            resolve({code: -1, msg: '新增失敗' + err})          }          resolve({code: 0, msg: '新增成功'})        })      })    })  }  // 返回給前端  ctx.body = await writeJson()})

2.刪除

刪除,這里使用的get方法

deploy.get('/delete', async (ctx) => {  let id = ctx.request.query.id  let deleteJson = () => {    return new Promise((resolve,reject)=>{      fs.readFile(path.join(__dirname, '/data/project.json'),function(err,data){        if(err){          resolve({code: -1, msg: '刪除失敗' + err})          return console.error(err);        }        let jsonData = data.toString();//將二進制的數據轉換為字符串        jsonData = JSON.parse(jsonData);//將字符串轉換為json對象        // 過濾出所存item的id和前端傳來id不等的 item ,下面提供了兩種方法filter和splice        jsonData = jsonData.filter((item) => item.id !== id);        // jsonData.splice(jsonData.findIndex(item => item.id === id), 1)        let str = JSON.stringify(jsonData);        fs.writeFile(path.join(__dirname, '/data/project.json'),str,function(err){          if(err){            resolve({code: -1, msg: '刪除失敗' + err})          }          resolve({code: 0, msg: '刪除成功'})        })      })    })  }  ctx.body = await deleteJson()})

3.查詢

deploy.get('/find', async (ctx) => {// 兩種查詢方式 1.id為空 => 查詢全部 2.id有值 => 查詢單個  let id = ctx.request.query.id  let findJson = () => {    return new Promise((resolve,reject)=>{      fs.readFile(path.join(__dirname, '/data/project.json'),function(err,data){        if(err){          resolve({code: -1, msg: '查詢失敗' + err})          return console.error(err);        }        let jsonData = data.toString();//將二進制的數據轉換為字符串        jsonData = JSON.parse(jsonData);//將字符串轉換為json對象        // 有id值=>單個 無id值=>全部        if (id) {          jsonData = jsonData.filter((item) => item.id === id);          resolve({code: 0, data: jsonData})        } else {          resolve({code: 0, data: jsonData})        }      })    })  }  ctx.body = await findJson()})

當然,上面提供的還沒有支持分頁,想要實現分頁,需求改變json格式,如下:

{ "data": [{"id": 1, "name": "唐僧"},      {"id": 2, "name": "孫悟空"},      {"id": 3, "name": "豬八戒"},      {"id": 4, "name": "沙和尚"}], "currentPage": 1, "pageSize": 4, "pageNum": 1, "total": 4}

新增page一些查詢參數,并在使用傳入的參數取對應數據。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永吉县| 巴青县| 广灵县| 洞口县| 巴里| 怀来县| 华亭县| 贺州市| 济南市| 岐山县| 湖州市| 富民县| 永兴县| 府谷县| 望都县| 贡觉县| 南雄市| 郧西县| 新泰市| 临邑县| 侯马市| 色达县| 栖霞市| 达拉特旗| 碌曲县| 凌海市| 康平县| 伊春市| 吐鲁番市| 襄汾县| 沛县| 陆丰市| 昭通市| 都安| 肇州县| 浦江县| 关岭| 获嘉县| 香港| 营山县| 京山县|