我们了解了中间件后,肯定很好奇它的用法,那么我就来给大家讲讲一些中间件的种类;
1、应用中间件:
这类中间件我们之前就学过了,就是跟在app后面的中间件,有全局和局部中间件:
app.use((req,res,next)=>{
console.log('全局中间件二')
req.sponse=req.sponse+'</br>我是全局中间件二'
next()
})
//2.3 使用全局中间建
app.get('/sideall',(req,res)=>{
res.send(req.sponse)
})
const mw1 = (req,res,next)=>{
console.log('局部中间件1')
req.sponse=req.sponse+'</br>我是局部中间件1'
next()
}
//3.3 使用局部中间件
app.get('/sideone',mw1,(req,res)=>{
res.send(req.sponse)
})
也就是我们常用的那种;
2、路由中间件:
就是将中间件挂载在路由上,我们之前也接触过路由,无非就是将中间件函数写在路由里面:
//1.1 导入express模块
const express=require('express')
//1.2 创建路由对象
const router = express.Router()
//2.1 挂载路由
//中间件函数
router.use((req,res,next)=>{
console.log('我是全局中间件')
next()
})
router.get('/mywelcome',(req,res)=>{
console.log('a customer come')
res.send('hello mycustomer')
})
//3.1 向外暴露路由对象
module.exports = router
3、错误中间件
这一类中间件常用来捕获路由异常,防止服务器崩溃;含有四个参数,第一个参数是err其他地方和其他中间件一样,但要注意,这一类中间件最好放在所有路由的后面,不然的话,有些路由异常捕获不到会崩溃:
const express=require('express')
const app=express()
//1.2 编写错误路由
app.get('/user',(req,res)=>{
throw new Error('出现不可描述的问题')
})
//1.1 定义错误中间件
app.use((err,req,res,next)=>{
console.log('服务器错误'+err.message)
res.send(err.message)
next()
})
app.listen(8080,()=>{
console.log('express running at http://127.0.0.1:8080')
})
我们利用throw new Error();抛出了一个错误,倘若没有下面的路由将会出现:
可以看到我们已经无法访问 ;但是我们加了错误捕获中间件之后:
但是服务器依然是可以使用的。
4、内置中间件,我们就用编码的中间件来介绍内置中间件吧:
以前我们用到express.static()其实也是一种内置中间件,这里我就不过多赘述;
express.json()该中间件是内置的,不需要我们编写,我们用use它即可,它的作用是将客户端请求过来的json()对象进行编译,不然我们拿不到其内容:
这里我们为了能更好的测试,直接上官网下载一个postman(点击链接,点击下载视窗版即可):
下载邮递员|免费开始使用 (postman.com)
下载完后我们免费注册一个账户即可;
//2.1 编写json格式转换应用
app.use(express.json())
//2.2 json获取路由
app.get('/name',(req,res)=>{
console.log(req.body)
res.send(req.body)
})
我们加入以上代码,记得一定要将app.use(express.json())放在路由之前,否则有一些路由请求的json将会无法编译;
我们通过postman发起了一份get请求,该请求是带有json对象的,关于该对象的编写,我们在网址栏的下面点击Body再点击下面的raw,然后点击旁边的下拉箭头选择json即可在下面的空白区域编写我们要请求的json对象;
可以看到,我们已经成功拿到了我们请求的对象,倘若没有编码中间件我们将会拿到空对象:
可以看到,我们发起一个带有urlencoded对象的请求,但我们没有加入编译urlencoded的中间件,于是就返回了一个空对象,这个请求编译的中间件同json一样是内置的中间件:
//2.3 编写urlencoded格式转换中间件
app.use(express.urlencoded({extended:false}))
//2.4 获取用户发起的urlencoded请求路由
app.get('/book',(req,res)=>{
console.log(req.body)
res.send(req.body)
})
我们加入上面代码即可,同样app.use(express.urlencoded({extended:false}))要放在所有路由之前;所有代码:
const express=require('express')
const app=express()
//2.1 编写json格式转换应用
app.use(express.json())
//2.3 编写urlencoded格式转换中间件
app.use(express.urlencoded({extended:false}))
//1.2 编写错误路由
app.get('/user',(req,res)=>{
throw new Error('出现不可描述的问题')
})
//1.1 定义错误中间件
app.use((err,req,res,next)=>{
console.log('服务器错误'+err.message)
res.send(err.message)
next()
})
//2.2 json获取路由
app.get('/name',(req,res)=>{
console.log(req.body)
res.send(req.body)
})
//2.4 获取用户发起的urlencoded请求路由
app.get('/book',(req,res)=>{
console.log(req.body)
res.send(req.body)
})
app.listen(8080,()=>{
console.log('express running at http://127.0.0.1:8080')
})
5、第三方中间件,我们就用我们常用的parser模块来讲解,第三方中间件就是不是内置的,也不是我们编写的中间件,是我们下过来的,第三方写的:
1)先安装这个模块:
npm i body-parser
2)导入模块并挂载编码urlencoded的中间件,这个是第三方写的:
//3.1 安装并导入body-parser模块
const parser=require('body-parser')
//3.2 挂载第三方编码中间件
app.use(parser.urlencoded({extended:false}))
//2.4 获取用户发起的urlencoded请求路由
app.get('/book',(req,res)=>{
console.log(req.body)
res.send(req.body)
})
我们使用上面的编译urlencoded代码,之前的可以注释掉:
可以看到,我们同样拿到了对象,使用json也是一样的方法,也是需要将中间件放在所有路由之前。
好了,类型就这么多,下一期我们学习如何自定义一个中间件。
关注我,更多分享!