Node.js第二天
模块化
每个JS文件看做是一个模块,每个模块通过固定的方式引入,并且通过固定的方式向外暴露指定的内容
优点:
1.对一类功能做很好的分类
2.保护成员不被污染
3.不用考虑导入顺序
4.按需导入,维护方便
自定义模块
注意:
1.JS文件名要有语义化
2.自定义模块名不能与核心模块同名,如fs.js
3.通过module.exports关键字按需引出
两种导出方式
第三方模块(NPM)
使用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的类型
6.filter过滤数组->删除数据,find查询数组->修改数据
7.对象的修改 不能重新赋值(stu=xxx),而是点(stu.xxx)