NodeJS 第二天

120 阅读2分钟

Node.js第二天

模块化

​ 每个JS文件看做是一个模块,每个模块通过固定的方式引入,并且通过固定的方式向外暴露指定的内容

1652183598261

优点

​ 1.对一类功能做很好的分类

​ 2.保护成员不被污染

​ 3.不用考虑导入顺序

​ 4.按需导入,维护方便

自定义模块

1652183691369

注意:

​ 1.JS文件名要有语义化

​ 2.自定义模块名不能与核心模块同名,如fs.js

​ 3.通过module.exports关键字按需引出

两种导出方式

1652184001997

第三方模块(NPM)

1652184082667

使用npm做学员管理服务器

// 导包
const express = require(`express`);
const { json } = require("express/lib/response");
const fs = require(`fs`);

// 创建
const sever = express();
// 获取请求需要开启 不开启 req.body值为 undefined
sever.use(express.urlencoded());

//#region 业务代码
sever.get(`/student`, (req, res) => {
  // 查询全部学员 = 获取数据 readFile
  fs.readFile(`./db/student.json`, (err, data) => {
    // 如果报错 就send 这个
    if (err) return res.send({ code: 1, message: "查询失败" });
    // 成功 根据格式要求 返回正确数据 data是buffer 解析成数组格式
    res.send({
      code: "0",
      message: "获取成功",
      data: JSON.parse(data),
    });
  });
});

sever.post(`/student`, (req, res) => {
  // 修改为urlencoded的类型
  console.log("请求体数据", req.body);
  // 读取文件
  fs.readFile(`./db/student.json`, (err, data) => {
    // 错误提示
    if (err) return res.send({ code: 1, message: "读取失败" });
    // buffer 解析->数组
    const arr = JSON.parse(data);
    // 处理学生数据
    const stu = {
      id: Date.now(),
      name: req.body.name,
      age: Number(req.body.age),
      sex: req.body.sex,
      phone: Number(req.body.phone),
    };
    // 数组 添加 数据
    arr.push(stu);
    // 写入文件 数组 转换->JSON字符串 可以传入三个参数  第三个参数 空格缩进多少
    fs.writeFile(`./db/student.json`, JSON.stringify(arr, null, 2), (err) => {
      // 错误提示
      if (err) return res.send({ code: 1, message: "添加失败" });
      // 正确提示
      res.send({
        code: 0, //业务状态码,0表示成功,1表示失败
        message: "添加学员成功", //描述信息
      });
    });
  });
});

sever.delete(`/student`, (req, res) => {
  console.log(`查询参数`, req.query);
  // 读取数据
  fs.readFile(`./db/student.json`, (err, data) => {
    if (err) return res.send({ code: 1, message: "读取失败" });
    // 解析->数组
    let arr = JSON.parse(data);
    console.log("arr", arr);
    // 删除->过滤新数组 字符串要转数字
    let newArr = arr.filter((v) => v.id !== Number(req.query.id));
    // 写入数据
    fs.writeFile(
      `./db/student.json`,
      JSON.stringify(newArr, null, 2),
      (err) => {
        if (err) return res.send({ code: 1, message: "删除失败" });
        res.send({
          code: 0, //业务状态码,0表示成功,1表示失败
          message: "删除学员及其所有成绩成功", //描述信息
        });
      }
    );
  });
});

sever.put(`/student`, (req, res) => {
  // 读取数据
  fs.readFile(`./db/student.json`, (err, data) => {
    if (err) return res.send({ code: 1, message: "读取失败" });
    // 解析数据
    const arr = JSON.parse(data);
    // find方法通过ID找到数组中的对象
    const stu = arr.find((item) => item.id === Number(req.body.id));
    console.log(stu);
    // 对象不能stu= 重新赋值 对象修改是stu. !!! 
    stu.name = req.body.name;
    stu.age = Number(req.body.age);
    stu.sex = req.body.sex;
    stu.phone = Number(req.body.phone);
    console.log(arr);// arr值就发生了改变
    // 写入数据 
    fs.writeFile(`./db/student.json`,JSON.stringify(arr,null,2), (err) => {
      if (err) return res.send({ code: 1, message: "修改失败" });
      res.send({
        code: 0, //业务状态码,0表示成功,1表示失败
        message: "更新学员成功", //描述信息
      });
    });
  });
});
//#endregion

// 监听
sever.listen(8008, () => {
  console.log(`服务开启`);
});

注意点

​ 1.开启服务器三个步骤:导包-->创建-->监听

​ 2.获取数据后写入数据

​ 3.JSON的使用

​ 4.获取请求开启 sever.use(express.urlencoded());

​ 5.修改与添加 注意修改为urlencoded的类型

1652184367981

​ 6.filter过滤数组->删除数据,find查询数组->修改数据

​ 7.对象的修改 不能重新赋值(stu=xxx),而是点(stu.xxx)