首页 > 其他分享 >json模拟数据,实现增删该查

json模拟数据,实现增删该查

时间:2022-10-21 12:12:10浏览次数:50  
标签:const 该查 queryDataRes json let 增删 path data id

operation.js

const {
    rejects
} = require('assert')
const fs = require('fs')
const {
    resolve
} = require('path')
/* 查询数据 */
const queryData = ({
    path
}) => {
    return new Promise((resolve, rejects) => {
        fs.readFile(path, (err, data) => {
            if (err) {
                rejects(err)
            }
            resolve(JSON.parse(data))
        })
    })
}
/*
写入数据
path,数据,插入方式
*/
const addData = async ({
    path,
    data,
    way = "push"
}) => {
    let queryDataRes = await queryData({
        path
    })
    if (queryDataRes) {
        queryDataRes = JSON.parse(queryDataRes)
    }
    if (way == "push") { //末尾
        queryDataRes.push(data)
    }
    if (way == "unshift") { //开头
        queryDataRes.unshift(data)
    }
    return new Promise((resolve, rejects) => {
        fs.writeFile(path, JSON.stringify(queryDataRes), (err, data) => {
            if (err) {
                rejects(err)
            }
            resolve({
                status: "success"
            })
        })
    })
}
/*
删除数据
*/
const deleteData = async ({
    path,
    id
}) => {
    // //1.查询数据
    let queryDataRes = await queryData({
        path
    })
    let checkIdRes = await checkId({
        path,
        id
    })
    if (checkIdRes === 0) {
        return 'id不存在!!'
    }
    //2.根据id删除数据
    queryDataRes = queryDataRes.filter(el => {
        return el.id !== id
    })
    return new Promise((resolve, rejects) => {
        fs.writeFile(path, JSON.stringify(queryDataRes), (err, data) => {
            if (err) {
                rejects(err)
            }
            resolve({
                status: "success"
            })
        })
    })
}

/*
编辑数据
*/
const editData = async ({
    path,
    id,
    data
}) => {
    //1.查询数据
    let queryDataRes = await queryData({
        path
    })
    let checkIdRes = await checkId({
        path,
        id
    })
    if (checkIdRes === 0) {
        return 'id不存在!!'
    }
    //2.根据id更新
    let index = queryDataRes.findIndex(el => {
        return el.id == id
    })
    if(!data.hasOwnProperty("id")){
        data.id=id
    }
    if(!data.hasOwnProperty("col")){
        data.col=queryDataRes[index].col
    }
    queryDataRes[index]=data
    return new Promise((resolve, rejects) => {
        fs.writeFile(path, JSON.stringify(queryDataRes), (err, data) => {
            if (err) {
                rejects(err)
            }
            resolve({
                status: "success"
            })
        })
    })
}


/*
校验id
*/

const checkId = async ({
    path,
    id,
}) => {
    //1.查询数据是否存在id -- (1)不存在自动生成 且返回id不存在 (2)接受id与id不匹配
    let queryDataRes = await queryData({
        path
    })
    //数据不存在id的情况
    let isHasId = queryDataRes.every(el => {
        return el.hasOwnProperty("id")
    })
    if (!isHasId) {
        queryDataRes.forEach((el, index) => {
            el.col = index
            el.id = generateId()
        })
        fs.writeFile(path, JSON.stringify(queryDataRes), (err, data) => {
            if (err) {
                rejects(err)
            }
            resolve({
                status: "success"
            })
        })
        return 0
    }
    //id不匹配的情况
    let idList = queryDataRes.filter(el => {
        return el.id == id
    })
    if (!idList.length) {
        return 0
    }
}



/*
util函数
*/
const generateId = () => { //获取随机id
    const s = [];
    const hexDigits = '0123456789abcdef';
    for (let i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    // bits 12-15 of the time_hi_and_version field to 0010
    s[14] = '4';
    // bits 6-7 of the clock_seq_hi_and_reserved to 01
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
    s[8] = s[13] = s[18] = s[23] = '-';
    const uuid = s.join('');
    return uuid;
}



module.exports = {
    queryData,
    addData,
    deleteData,
    editData
}

app.js

const fs = require('fs')
const express = require('express')
const {
    queryData,
    addData,
    deleteData,
    editData
} = require('./operation')
const app = express()
app.use(express.static('./data/'))
/* end */
//得到数据
app.get('/getData', async (req, res) => {
    let queryDataRes = await queryData({
        path: "./data/af.json"
    })
    if (queryDataRes) {
        res.send(queryDataRes)
    }
})
//新增数据
app.get('/addData', async (req, res) => {
    let obj = {
        "name": "3",
        "age": "3",
        "asd": "3"
    }
    let addDataRes = await addData({
        path: "./data/data.json",
        data: obj,
        way: "unshift"
    })
    if (addDataRes) {
        res.send("添加成功!")
    }
})

//删除数据
app.get('/deleteData', async (req, res) => {
    let deleteDataRes = await deleteData({
        path: "./data/data.json",
        id: "17a05538-623c-465c-805c-3f506da858d0"
    })
    if (deleteDataRes) {
        res.send(deleteDataRes)
    }
})
//编辑数据
app.get('/editData', async (req, res) => {
    let data= {
        "name": "睡觉",
        "age": "150",
        "asd": "84794393-8cf7-462c-86f7-52de9f54caf3",
        "id": "d64c1753-4c8e-4145-8c8c-28846fd37239",
        "col": 4
    }
    let id="d64c1753-4c8e-4145-8c8c-28846fd37239"
    let editDataRes = await editData({
        path:"./data/data.json",
        id,
        data
    })
    if(editDataRes){
        res.send("success!!")
    }
})
app.listen(8090, () => console.log('localhost:8090'))

data.json

[{
    "name": "吃饭",
    "age": "15",
    "asd": "324234",
    "id": "98570e4b-2b7d-4396-8602-eda23d6f7162",
    "col": 1
}, {
    "name": "吃饭",
    "age": "15",
    "asd": "324234",
    "id": "b1240772-db0a-42e4-8d14-6ba0a24aa2b1",
    "col": 2
}, {
    "name": "吃饭",
    "age": "15",
    "asd": "324234",
    "id": "51e9a972-766c-4dd2-bd10-7cf4808b85b7",
    "col": 3
}, {
    "name": "睡觉",
    "age": "150",
    "asd": "84794393-8cf7-462c-86f7-52de9f54caf3",
    "id": "d64c1753-4c8e-4145-8c8c-28846fd37239",
    "col": 4
}]

标签:const,该查,queryDataRes,json,let,增删,path,data,id
From: https://www.cnblogs.com/mywifeisMsHu/p/16813037.html

相关文章

  • Elasticsearch-----介绍与增删改查操作
    一、介绍:1、概念:是功能非常强大的全文搜索引擎,目的是为了能快速的查询数据2、核心概念:接近实时(NRT):Elasticsearch是一个接近实时的搜索平台。从索引一个文档直到这个文档能......
  • mysql-增删改查
    mysql-增删改查####mysqlctrl+l清屏ctrl+c终止[linux]servicemysqlstart启动mysqlservicemysqlstop停止mysqlservicemysqlrestart重启mysql......
  • jmeter BeanShell 后置处理器 提取json数组,重新组装后供下一个接口使用
    前置条件:在jmeter中使用Json需要先下载一个json包放到jmeter安装路径下的lib\ext下我这里用的是json-20140107.jar我已经放到了百度网盘上,需要的可以自取:链接:https://p......
  • jmeter 提取json数组中的所有key相同的值,并返回数组
    接口响应数据如下:{"msg":"ok","result":{"total":5530,"num":2,"list":[{"classid":2,......
  • os sys json模块
    Day19ossysjson今日内容概要os模块sys模块json模块json模块实践今日内容详细一、os模块os模块主要与代码运行所在的操作系统打交道 importos1.创建目录......
  • firebath数据库常见操作——增删改查使用总结
    firebath数据库常见操作——增删改查使用总结问题背景之前在看一个GitHub上的海外项目用到了Google的实时在线数据库firebath,查看官方文档提供的demo和api介绍感觉相对还......
  • os模块,sys模块,json模块,json模块练习
    os模块(重要)os模块主要与代码运行所在的操作系统打交道importos1.创建目录(文件夹)os.mkdir(r'd1')#相对路径在执行文件所在的路径下创建目录可以创建单......
  • python内置模块:os、sys、json
    目录一、os模块1os.mkdir()和os.makedirs()创建目录(文件夹)1.mkdir()可以创建单机目录2.makedirs()可以创建单级目录和多级目录2os.rmdir()和os.makedi......
  • os 模块 sys模块 json模块
    今日内容详细os模块(重要)os模块主要与代码运行所在的操作系统打交道importos1.创建目录1.创建目录(文件夹)os.mkdir(r'L4')#只可以创建单级目录相对路......
  • python进阶之路18 os、sys、json模块
    os模块与sys模块os模块主要与操作系统打交道sys模块主要与python解释器打交道os模块(重要)os模块主要与代码运行所在的操作系统打交道importos#1.创建目录(......