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'))//相对路径和绝对路径都可

浙公网安备 33010602011771号