下面是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()
}