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

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
}]
posted @ 2022-10-21 12:02  禾耳  阅读(142)  评论(0)    收藏  举报