express 中间件 路由中间件 路由中间件/全局/错误处理/内置/第三方中间件 中间件应用

中间件是什么

中间件是一堆方法,可以接收客户端发来的请求、可以对请求作出响应,也可以将请求继续交给下一个中间件继续处理

中间件由2部分组成:中间件方法,请求处理函数

中间件方法由Express提供,负责拦截请求,请求处理函数由开发人员提供,负责处理请求
路由也是中间件

app.get('请求路径','处理函数') // 接收并处理get请求
app.post('请求路径','处理函数') // 接收并处理post请求

路由中间件

可以针对同一个请求设置多个中间件,对同一个请求进行多次处理 (路由中间件)
默认情况下,请求从上到下依次匹配中间件,一旦匹配成功,终止匹配(就不会往下执行了 不会调用后面的路由处理 调用next() 就会继续往下执行)

const app = require('express')()
// 中间件一
app.get('/add',(req, res, next)=>{
	req.name = "/add 路由中间件"
	next() // 调用下一个中间件
})
// 中间件二
app.get('/add',(req, res, next)=>{
	req.age = 19
	next()
})

app.get('/add', (req, res)=>{
    let {name, age} = req
    res.send({name, age})
})
// localhost:3000/add
app.listen(3000,()=>console.log("服务器启动成功"))

全局/应用程序级别中间件 app.use

app.use 匹配所有的请求方式,可以直接传入处理函数 代表接收所有请求

app.use((req, res, next)=>{
    next()
})

关心路径的中间件
匹配 路径以 /admin 开头的 /admin /admin/a /admin/a/b …

app.use('/admin',(req, res, next)=>{
    next()
})

示例

const app = require('express')()

// 所要请求都会触发
app.use((req, res, next)=>{
    req.name = "应用程序级别中间件"
    next()
})

// /admin
app.use('/admin',(req, res, next)=>{
    req.name1 = "/admin 路径的请求"
    next()
})

app.get('/admin/add', (req, res)=>{
    let {name, name1} = req
    res.send({name, name1})
})
// localhost:3000/admin/add
app.listen(3000,()=>console.log("服务器启动成功"))

错误处理中间件

在程序执行的过程中,不可避免的会出现一些错误,比如文件读取失败,数据库连接失败
默认只能捕获同步的错误
异步错误处理

const app = require('express')()

// 所要请求都会触发
app.use((req, res, next)=>{
    req.name = "应用程序级别中间件"
    next({err:'ffff'}) // 传入错误参数 异步错误处理
    
	// 或者 抛出错误 默认只能捕获同步的错误
	// thorw new Error("程序执行错误")
	// thorw "程序执行错误"
	// 或者 代码报错
})

app.get('/admin/add', (req, res)=>{
    let {name, name1} = req
    res.send({name, name1})
})

// 错误处理
app.use((err,req, res, next)=>{
    console.error(err) // next() 传入的内容
    res.status(500).send("错误处理")
})

app.listen(3000,()=>console.log("服务器启动成功"))

内置中间件

// express.static
// express.json
// express.urlencoded
// ....

// 开放静态资源 path.join(__dirname,"./public/") 会改造成绝对路径
app.use("/public/",express.static(path.join(__dirname,"./public/")))
app.use("/node_modules/",express.static(path.join(__dirname,"./node_modules/")))

第三方中间件

// border-parser
// compression
// ....

let bodyParser = require("body-parser")      
// post参数处理
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json())  

中间件应用

  1. 路由保护,客户端在访问需要登录的页面时,可以先使用中间件判断用户登录状态,用户如果没有登录则拦截请求,直接响应,禁止用户进入需要登录的页面。
  2. 网站维护公告,在所要路由的最上面定义接收所有请求的中间件,直接为客户端作出响应,网站正在维护中。(在最上面定义一个app.use直接响应内容)
  3. 自定义404页面(在最后定义一个app.use响应404内容) 404示例
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值