express中间件

express中间件学习

安装nodemon

直接在cmd中全局安装
npm install -g nodemon

安装完成后如果nodemon -v能返回版本号,则安装成功。

安装express

npm install express

欢迎使用express

const express = require('express')

const app = express()

app.listen(8000,()=>{
  console.log('欢迎使用express')
})

中间件的本质:一个回调函数

如果当前中间件功能没有结束请求-响应周期,则必须调用next()将控制权传递给下一个中间件功能,否则,请求将被挂起

app.get('/',(req,res,next)=>{
  next()  // 中间件回调参数,调用栈中下一个中间件
})

express提供的两种应用方式

app/router.use

app.use('/login',(req,res,next)=>{
    console.log('path  middleware')
})
路径匹配,methods(GET、POST等方式都能匹配)
中间件执行顺序:按照能匹配的中间件注册顺序执行。

app/router.methods

app.get('/login',(req,res,next)=>{
    console.log('path and methods middleware')
})

连续注册多个中间件

app.get('/home',(req,res,next)=>{
  console.log('注册了一个连续注册中间件01')
  next()
},(req,res,next)=>{
  console.log('注册了一个连续注册中间件02')
  res.end('连续注册中间件')
})

数据解析

app.use(express.json()) // 解析jion

app.use(express.urlencoded({extend:true})) // 解析urlencoded

使用multer插件,解析form-data

安装 npm install multer
使用

//解析json
const upload = multer()

app.post('/login',upload.any(),(req,res,next)=>{
     
 console.log(req.body)
  
  res.end('登录成功')

})


//解析文件
const storage = multer.diskStorage({
  destination:function(req,file,cb){
    cb(null,'./uploads/')
  },
  filename:function(req,file,cb){
    const filename = Date.now() + '-' + file.originalname
    cb(null,filename)
  }
})

const upload = multer({
  // dest:'./uploads/'
  storage
}) // 配置multer中间件,指定文件上传的存储目录

// 注意 upload.any()与upload.single()需要分开解析,不然解析两次会导致报错。
app.post('/upload',upload.single('file'),(req,res,next)=>{
  console.log(req.file) // 文件信息
  res.end('文件上传成功~')

})

解析params和query的get请求参数

app.get('/user/:id/:name',(req,res,next)=>{
  console.log('params:',req.params)
  res.end('用户参数获取成功')
})
app.get('/login',(req,res,next)=>{
  console.log('query:',req.query)
  res.end('用户登录成功')
})

路由

我们可以使用express.Router来创建一个路由

  • 一个Router实例拥有一个完整的中间件个路由系统。因此,它也被称为迷你应用程序(mini-app)

创建一个路由文件router/users.js

//router/users.js

const express = require('express')

const router = express.Router()

// 用户列表接口

router.get('/users',(req,res,next)=>{

  res.json(['张三','李四','王五'])
})

// 用户详情接口
router.get('/users/:id',(req,res,next)=>{

  res.json(`用户${req.params.id}的信息`)
})


// 创建用户接口
router.post('/user',(req,res,next)=>{
  res.json('创建用户成功')
})


module.exports = router

在app中应用并注册路由

const express = require('express')

const app = express()

//引入路由
const userRouter = require('../02_express/routers/users')

// 注册路由中间件
app.use('/user',userRouter)


app.listen(8000,()=>{
  console.log('express server success')
})

静态资源部署

app.use(express.static('./public'))//相对路径和绝对路径都可
posted @ 2025-12-23 15:35  FE阿祖  阅读(3)  评论(0)    收藏  举报