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

首頁 > 開發(fā) > JS > 正文

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

2024-05-06 16:47:58
字體:
供稿:網(wǎng)友

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

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

代碼準(zhǔn)備

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請求傳來的數(shù)據(jù),id是用來查找之前有的數(shù)據(jù)并進(jìn)行修改,新增數(shù)據(jù)的在前臺(tái)應(yīng)該將id設(shè)置為空  let id = ctx.request.body.id  let params = ctx.request.body.params  let writeJson = () => {    return new Promise((resolve,reject)=>{    // fs模塊讀取json文件 對(duì)fs、path模塊不熟悉的可以去查下官方文檔      fs.readFile(path.join(__dirname, '/data/project.json'),function(err,data){        if(err){        // 報(bào)錯(cuò)返回          resolve({code: -1, msg: '新增失敗' + err})          return console.error(err);        }        let jsonData = data.toString();//將二進(jìn)制的數(shù)據(jù)轉(zhuǎn)換為字符串        jsonData = JSON.parse(jsonData);//將字符串轉(zhuǎn)換為json對(duì)象        // 有id值=>修改 無id值=>新增        if (id) {          jsonData.splice(jsonData.findIndex(item => item.id === id), 1, params)        } else {        // 有重復(fù) => 返回-1 無重復(fù) => 將params加到j(luò)son數(shù)組末尾          let hasRepeat = jsonData.filter((item) => item.id === params.id);          hasRepeat ? resolve({code: -1, msg: '新增失敗,有重復(fù)項(xiàng)目id'}) : jsonData.push(params);        }        //因?yàn)閚odejs的寫入文件只認(rèn)識(shí)字符串或者二進(jìn)制數(shù),所以把json對(duì)象轉(zhuǎn)換成字符串重新寫入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();//將二進(jìn)制的數(shù)據(jù)轉(zhuǎn)換為字符串        jsonData = JSON.parse(jsonData);//將字符串轉(zhuǎn)換為json對(duì)象        // 過濾出所存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為空 => 查詢?nèi)?2.id有值 => 查詢單個(gè)  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();//將二進(jìn)制的數(shù)據(jù)轉(zhuǎn)換為字符串        jsonData = JSON.parse(jsonData);//將字符串轉(zhuǎn)換為json對(duì)象        // 有id值=>單個(gè) 無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()})

當(dāng)然,上面提供的還沒有支持分頁,想要實(shí)現(xiàn)分頁,需求改變json格式,如下:

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

新增page一些查詢參數(shù),并在使用傳入的參數(shù)取對(duì)應(yīng)數(shù)據(jù)。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 秦皇岛市| 闸北区| 洛隆县| 嘉善县| 临安市| 平遥县| 年辖:市辖区| 左权县| 张家口市| 黔江区| 台南县| 西青区| 花莲县| 普定县| 田东县| 冀州市| 麻城市| 淳安县| 舒城县| 婺源县| 固安县| 都兰县| 泽州县| 温州市| 项城市| 徐汇区| 嘉黎县| 兴安盟| 黔南| 福安市| 岑溪市| 滦平县| 繁昌县| 上饶市| 库尔勒市| 称多县| 城步| 高唐县| 额敏县| 峨眉山市| 突泉县|