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'))//相对路径和绝对路径都可
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |