node js 增删改查

127 阅读2分钟
/* 
线上的接口服务器  图书列表 
1 查询数据
  1 get 
  2 /api/getbooks
  3 不带参数 
  4 带参数 
2 增加数据
  1 post
  2 /api/addbook
  3 带参数 
3 删除数据
  1 delete
  2 /api/delbook
  3 参数  id 
4 修改数据
  1 put
  2 /api/updatebook
  3 参数 。。。 
 */

const http = require('http');
const fs = require('fs');

const app = http.createServer((req, res) => {
  // console.log(req.url);

  // 考虑到get请求或者delete请求可能会携带参数  所以 url 和参数的处理
  // query  id = 1233
  const [url, query] = req.url.split('?');

  // 请求的方式  req.method
  // 请求的url   req.url
  // 获取文件
  const books = fs.readFileSync('./data/books.json');
  // 字符串转成数组
  const bookList = JSON.parse(books);
  // 判断 查询
  if (req.method === 'GET' && url === '/api/getbooks') {
    res.end(books);
  } else if (req.method === 'POST' && url === '/api/addbook') {
    // 我们想要获取post请求的参数 繁琐
    let body = '';
    req.on('data', (chunk) => {
      // chunk 块级
      body += chunk;
    });

    req.on('end', () => {
      // 前端发送的数据 终于结束了 所有的数据 body中
      // console.log(body);
      const params = parseURL(body);
      // 给对象添加一个id属性
      params.id = Date.now(); // 设置了 1970年1月1日到现在的毫秒数 理解唯一值
      // console.log(params);
      // 1 接收到数据
      // 2 获取本地的books.json 文件 转成数组
      // 3 数组添加元素 push
      bookList.push(params);
      // 4 重新把数组 写会books.json 文件中 完成数据新增
      fs.writeFileSync('./data/books.json', JSON.stringify(bookList));
      // 判断 新增
      res.end('post数据提交成功');
    });
  } else if (req.method === 'DELETE' && url === '/api/delbook') {
    // 1 获取 要删除的图书的id
    const { id } = parseURL(query);

    // 2 根据id 去寻找对应的数组 中和id想对应的元素所在的下标 索引
    const index = bookList.findIndex((value) => {
      // console.log(typeof id);
      // console.log(typeof value.id);
      return value.id == id;
    });
    if (index === -1) {
      // 没有找到
      res.end('找不到你要删除的元素');
    } else {
      // 3 执行 数组删除元素
      bookList.splice(index, 1);
      // 4 数组已经发生了改变 把数组重新写回文件中
      fs.writeFileSync('./data/books.json', JSON.stringify(bookList));
      // 判断 删除
      res.end('删除');
    }
  } else if (req.method === 'PUT' && url === '/api/updatebook') {
    // 1 获取到提交过来的数据 对象格式 req.on data  end
    let body = '';
    req.on('data', (chunk) => {
      body += chunk;
    });
    req.on('end', () => {
      // 2 body 数据   a=1&b=2&c=3
      const params = parseURL(body);
      console.log(params); // { id: '6', author: '黑马', bookname: '从入门到精通', publisher: '斑马出版社' }
      // 3 找到被修改元素的下标 根据id来找
      const index = bookList.findIndex((value) => value.id == params.id);

      // 4 判断是否能找到
      if (index === -1) {
        res.end('要修改的元素不存在 请检查重试');
      } else {
        // 找到  全部替换
        // bookList[index] = params;
        bookList[index] = { ...bookList[index], ...params };
        fs.writeFileSync('./data/books.json', JSON.stringify(bookList));
        // 判断 修改
        res.end('修改');
      }
    });
  } else {
    res.end('xxxxx');
  }
});

app.listen(8888, () => console.log('8888端口开启成功'));

// 负责处理 url参数转成对象格式
function parseURL(query) {
  const usp = new URLSearchParams(query);
  let obj = {};
  usp.forEach((value, key) => (obj[key] = value));
  return obj;
}