1.1、中间件
1.1.1、中间件理解
Express框架中一个非常重要的概念——中间件。在Express框架中,允许通过中间件的使用来调用各种第三方类库,这让我们的开发工作变得更为方便,也使得我们可以开发出各种更为强大的应用程序。
一个中间件是一个用于处理客户端请求的函数。一个HTTP服务器中可能会使用到各种中间件。当接收到一个客户端请求时,首先将该请求提交给第一个中间件函数,每一个中间件函数内部封装一个next回调函数,在一个中间件函数内部可以判断是否调用next回调函数来处理该客户端请求。一个最简单的中间件的书写方法如下所示。
function middleware(req,res,next){next()}
中间件可以理解为业务流程的中间处理环节。如生活中吃一般炒青菜,大约分为如下几步骤:
express中当一个请求到达的服务器之后,可以在给客户响应之前连续调用多个中间件,来对本次请求和返回响应数据进行处理。(middleware)
1.1.2、中间件分类
中间件可以分类可分如下几类
- 内置中间件 也就是express本身自带无带npm安装
- 第三方中间件
非 Express 官方内置的,而是由第三方开发出来的中间件,叫做第三方中间件。在项目中可以通过npm进行安装第三方中间件并配置,从而提高项目的开发效率。例如body-parser 此中间件可以很方便帮助我们获取到post提交过来的数据。
- 自定义中间件 开发者自己编写的
1.1.3、自定义中间件
自定义中间件,其本质就是定义一个处理请求的函数,只是此函数中除了有request和response参数外还必须包含一个next参数,此参数作用让中间件能够让流程向下执行下去直到匹配到的路由中发送响应给客户端。也可以通过给request对象添加属性来进行中间件数据的向下传递
function mfn(req,res,next){
// 中间件最后一定要执行此函数,否则程序无法向下执行下去
next()
}
使用中间件来实现错误的统一处理,即错误级别中间件
app.get(uri,(req,res)=){
// 如果处理有异常 抛出一个自定义错误
throw new Error('服务器内部错误')
res.send('hello')
})
// 自定义中间件完成错误级别中间件
app.use((err,req,res,next)=>{
// 此处err必须为第1个参数,它会获取得到 throw抛出的异常信息
console.log(err.message)
res.send(err.message)
})
1.1.4、内置中间件
express也提供了好用的内置中间件,如提供一个静态资源管理的中间件,通过此中间件就可以帮助为我们快速搭建一个静态资源服务器
app.use(express.static('托管目录地址'))
1.1.5、第三方中间件
express搭建的web服务器中想要接受表单中的post数据可以通过第3方中间件帮助解析获取post数据 body-parser
- 安装
npm i -S body-parser
- 通过中间件调用 app.use(body.urlencoded({extended: false}))
创建 application/x-www-form-urlencoded 解析
- 在匹配的路由中通过 req.body获数post中数据