Node.js 学习笔记12|express(六)Router

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"))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值