写在前面
express是一个简洁的,灵活的 node.js应用开发框架,他提供很多强大的功能可以帮助你创建各种web和移动设备应用。express项目的底层是由许多的中间件在协同工作,可以这么说,一个Express应用就是在调用各种中间件。
什么是中间件?
中间件是一个可访问请求对象(req)和响应对象(res)的函数。中间件就是类似于一个过滤器的东西,在客户端和应用程序之间的一个处理请求和响应的的方法。
该函数中有三个基本参数, req、res、next
- req就是回调函数中的req对象
- res就是回调函数中的res对象
- next:当该中间件执行完成后自动进入下一个中间件
中间件的功能:
- 执行任何代码
- 修改请求和相应对象
- 终结响应-请求循环
- 调用堆栈中的下一个中间件
注意: 如果当前中间件没有终结请求-响应循环,则必须调用 next()
方法将控制权交给下一个中间件,否则请求就会挂起。使用可选则挂载路径,可在应用级别或路由级别装载中间件。可装载一系列中间件函数,在挂载点创建一个中间件系统栈。
自定义中间件
eg:自定义中间件中,每当有用户访问时,将访问时间和url地址记录到url.log中
每当有人访问: http://127.0.0.1:3000/index 地址时,将 /index 2019-01-10 18:10:20 --> run.log
每当有人访问: http://127.0.0.1:3000/admin 地址时,将 /admin 2019-01-10 18:10:20 --> run.log
- 使用fs模块中的appendFile方法,将 请求地址和时间拼接成字符串,并写入 run.log 文件中
-
将写日志的代码封装为函数,在每个路由监听中都调用一次
-
写日志的函数改造为中间件函数
① 参数列表要有:req res next 三个参数
② 中间件执行完后必须调用next让流程进入下一个中间件
express有五中类别的中间件:
- 应用级别的中间件: 挂载到 app 上的中间件,例如:app.use()
- 路由级别的中间件: 挂载到 router 对象上的中间件,例如:router.get()、 router.post
- 错误级别的中间件: 回调函数中,有四个参数 app.use((err, req, res, next)=>{})
- 内置中间件: express.static() , express提供的唯一内置中间件
- 第三方中间件: 非express框架提供的,需要程序员手动安装才能使用的中间件;body-parser 解析post 表单数据