Router是express中创建的一个对象。router实际上是一个中间件,可以在该中间件上去绑定各种路由以及其他的中间件。可以把路由绑定在router上,通过中间件将router设置到整个应用当中去使路由生效。
新建router文件夹放置中间件文件。
//student.js
const express = require("express")
const router = express.Router()
let STUDENT_ARR = require("../data/students.json")
const path = require("node:path")
const fs = require("fs/promises")
//学生列表的路由
router.get("/list", (req,res) => {
if(req.cookies.username){
res.render("students", { stus:STUDENT_ARR})
}else{
res.render("/")
}
})
//添加学生的路由
router.post("/add", (req,res,next) => {
const id = STUDENT_ARR.at(-1) ? STUDENT_ARR.at(-1).id +1 : 1 //三元运算符
const newUser ={
id,
name:req.body.name,
age:+req.body.age,
gender:req.body.gender
}
STUDENT_ARR.push(newUser)
//调用next交由后续路由继续处理
next()
})
//删除学生的路由
router.get("/delete", (req,res,next) => {
const id = +req.query.id //字符串
STUDENT_ARR = STUDENT_ARR.filter(
(stu) => stu.id !==id )
next()
})
//修改
router.get("/to-update", (req,res) => {
const id = +req.query.id
const student = STUDENT_ARR.find(item => item.id === id)
res.render("update",{stu:student})
})
router.post("/update-user", (req,res,next) => {
const {id,name,age,gender} = req.body
const studUser = STUDENT_ARR.find(item => item.id == id)
studUser.name = name
studUser.age = +age
studUser.gender = gender
next()
})
//处理存储文件的中间件
router.use((req,res) => {
fs.writeFile(path.resolve(__dirname,"../data/students.json"),
JSON.stringify(STUDENT_ARR))//把对象转换为字符串
.then(() => {
res.redirect("/students/list")
}).catch(()=>{
res.send("操作失败")
})
})
module.exports = router
//在index文件中引入
app.use("/students",require("./routes/student"))