Node.js前后端ajax交互的app.js

下面是app.js代码     这是一个搭建的简易服务器,实现了数据的增删改查功能,适用于购物车,商品列表,员工列表等等!!!!!

const http = require("http")
const fs = require("fs")
const url = require("url")
const qs = require("querystring")

http.createServer((req,res)=>{
    if(req.url.includes("/api")){
        dataRequest(req,res);
    }else{
        fileRequest(req,res);
    }
}).listen(3000,()=>{
    console.log("服务器开启成功")
})

function fileRequest(req,res){
    const p = url.parse(req.url).pathname;
    fs.readFile("./www" + p, (err,data)=>{
        if(err){
            res.write("404")
        }else{
            res.write(data)
        }
        res.end()
    })
}

function dataRequest(req,res){
    if(req.method === "GET"){
        const data = url.parse(req.url, true).query
        transit(req,res,data)
    }else if(req.method === "POST"){
        let str = ""
        req.on("data",d=>{
            str += d;
        })
        req.on("end",()=>{
            const data = qs.parse(str);
            transit(req,res,data)
        })
    }
}

function transit(req,res,data){
    switch(data.type){
        case "insert":
            insert(req,res,data);break;
        case "del":
            del(req,res,data);break;
        case "update":
            update(req,res,data);break;
        case "select":
            select(req,res,data);break;
        default:
            err(req,res,data);
    }
}

function insert(req,res,reqData){
    // console.log("insert", data)
    // 先读取数据库中的数据
    fs.readFile("./databases/stu.json","utf-8",(err,data)=>{
        // 准备向前端响应的数据容器
        const obj = {};
        if(err){
            // 读取失败的信息
            obj.code = 0;
            obj.msg = [];
            obj.title = "读取失败";
            res.write(JSON.stringify(obj))
            res.end()
        }else{
            // 读取成功,增加新数据
            const arr = JSON.parse(data);
            // 保留老数据,增加失败时,返回给前端
            const arr2 = JSON.parse(data);
            // 增加数据
            arr.push({
                id:Date.now() + "" + Math.random(),
                name:reqData.name,
                sex:reqData.sex,
                age:reqData.age
            })
            // 将增加后的数据,重新写入文件
            fs.writeFile("./databases/stu.json", JSON.stringify(arr), err=>{
                if(err){
                    // 读取成功但添加失败
                    obj.code = 2;
                    obj.msg = arr2;
                    obj.title = "读取成功但添加失败";
                }else{
                    // 添加成功
                    obj.code = 1;
                    obj.msg = arr;
                    obj.title = "添加成功";
                }
                // 向前端返回信息
                res.write(JSON.stringify(obj))
                res.end();
            })
        }
    })
}
function del(req,res,reqData){
    fs.readFile("./databases/stu.json","utf-8",(err,data)=>{
        // 准备向前端响应的数据容器
        const obj = {};
        if(err){
            // 读取失败的信息
            obj.code = 0;
            obj.msg = [];
            obj.title = "读取失败";
            res.write(JSON.stringify(obj))
            res.end()
        }else{
            // 读取成功,增加新数据
            // 先解析读取到的数据
            let arr = JSON.parse(data);
            // 保留老数据,修改失败时,返回给前端
            let arr2 = JSON.parse(data);
            // 根据id,先从数据中查找到要修改的数据
            let i=0;
            arr.some((val,idx)=>{
                i = idx;
                return val.id === reqData.id;
            })
            // 删除数据
            // arr2[i]=arr.slice(i)
            arr.splice(i,1)

            // 将修改后的数据,重新写入文件
            fs.writeFile("./databases/stu.json", JSON.stringify(arr), err=>{
                if(err){
                    // 读取成功但修改失败
                    obj.code = 2;
                    obj.msg = arr2;
                    obj.title = "读取成功但修改失败";
                }else{
                    // 修改成功
                    obj.code = 1;
                    obj.msg = arr;
                    obj.title = "修改成功";
                }
                // 向前端返回信息
                res.write(JSON.stringify(obj))
                res.end();
            })
        }
    })
}
function update(req,res,reqData){
    // console.log("update", data)
    // 先读取数据库中的数据
    fs.readFile("./databases/stu.json","utf-8",(err,data)=>{
        // 准备向前端响应的数据容器
        const obj = {};
        if(err){
            // 读取失败的信息
            obj.code = 0;
            obj.msg = [];
            obj.title = "读取失败";
            res.write(JSON.stringify(obj))
            res.end()
        }else{
            // 读取成功,增加新数据
            // 先解析读取到的数据
            const arr = JSON.parse(data);
            // 保留老数据,修改失败时,返回给前端
            const arr2 = JSON.parse(data);
            // 根据id,先从数据中查找到要修改的数据
            let i=0;
            arr.some((val,idx)=>{
                i = idx;
                return val.id === reqData.id;
            })
            // 修改数据
            arr[i].name = reqData.name
            arr[i].sex = reqData.sex
            arr[i].age = reqData.age

            // 将修改后的数据,重新写入文件
            fs.writeFile("./databases/stu.json", JSON.stringify(arr), err=>{
                if(err){
                    // 读取成功但修改失败
                    obj.code = 2;
                    obj.msg = arr2;
                    obj.title = "读取成功但修改失败";
                }else{
                    // 修改成功
                    obj.code = 1;
                    obj.msg = arr;
                    obj.title = "修改成功";
                }
                // 向前端返回信息
                res.write(JSON.stringify(obj))
                res.end();
            })
        }
    })
}
function select(req,res,data){
    // console.log("select", data)
    fs.readFile("./databases/stu.json","utf-8",(err,data)=>{
        // 准备向前端响应的数据
        const obj = {};
        if(err){
            // 读取失败的信息
            obj.code = 0;
            obj.msg = [];
            obj.title = "读取失败";
        }else{
            // 读取成功的信息
            obj.code = 1;
            obj.msg = JSON.parse(data);
            obj.title = "读取成功"
        }
        // 转成json后向前端响应
        res.write(JSON.stringify(obj));
        res.end()
    })
}
function err(req,res,data){
    console.log("err", data)
    res.end()
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值