全局生效的中间件
客户端发起的任何请求,到达服务器之后,都会触发中间件,叫做全局生效的中间件
通过调用app.use(传递中间件函数),即可定义一个全局生效的中间件 (这里的中间件定义要在路由前面)
const express=require('express')
//创建服务器
const app=express()
//middleware nv注册成为全局生效的中间件 //服务器收到请求会将请求先交给中间件
const mv=function(req,res,next){
console.log('这是最简单的中间件函数')
next()//把流转关系 转交给下一个中间件或者路由---只要这中间件中的业务处理完毕必须在最后调用next函数
}
//将mv注册为全局生效的中间件 下一个流转关系就是路由
app.use(mv)
//定义一个路由
app.get('/',(req,res)=>{
res.send('这是服务器给的 响应客户端127.0.0.1/的get请求')
})
//定义一个路由
app.get('/user',(req,res)=>{
res.send('这是服务器给的 响应客户端的127.0.0.1/user的get请求')
})
app.listen(80,()=>{
console.log('服务器启动成功 127.0.0.1')
})
定义全局中间件的简化形式
实际上使用的中间变量的中间件和app.use(中间件函数)可以结合使用
const express=require('express')
//创建服务器
const app=express()
//middleware nv注册成为全局生效的中间件 //服务器收到请求会将请求先交给中间件
//将mv注册为全局生效的中间件 下一个流转关系就是路由
app.use(function(req,res,next){
console.log('这是最简单的中间件函数')
next()//把流转关系 转交给下一个中间件或者路由---只要这中间件中的业务处理完毕必须在最后调用next函数
})
//定义一个路由
app.get('/',(req,res)=>{
res.send('这是服务器给的 响应客户端127.0.0.1/的get请求')
})
//定义一个路由
app.get('/user',(req,res)=>{
res.send('这是服务器给的 响应客户端的127.0.0.1/user的get请求')
})
app.listen(80,()=>{
console.log('服务器启动成功 127.0.0.1')
})
中间件的作用(服务器收到请求会将请求先交给中间件)
多个中间件之间,共享同一份req和res。基于这样的特性,可以在上游的中间件中, 统一为req或者res对象添加自定义的属性或方法,可以给下游的中间件或路由进行使用。 req.startTime=time(req.属性 就是为其添加属性的——获取请求到服务器的时间,就是在中间件的时候记录时间)
const express=require('express')
//创建服务器
const app=express()
//middleware nv注册成为全局生效的中间件 //服务器收到请求会将请求先交给中间件
//将mv注册为全局生效的中间件 下一个流转关系就是路由
app.use(function(req,res,next){
const time=Date.now() //请求到服务器的时间
//为req对象,挂载自定义属性,从而把时间共享给后面的路由
req.startTime=time
next()//把流转关系 转交给下一个中间件或者路由---只要这中间件中的业务处理完毕必须在最后调用next函数
})
//定义一个路由 --在路由中得到请求到服务器的时间
app.get('/',(req,res)=>{
res.send('/'+req.startTime)
})
//定义一个路由 --在路由中得到请求到服务器的时间
app.get('/user',(req,res)=>{
res.send('/user'+req.startTime)
})
app.listen(80,()=>{
console.log('服务器启动成功 127.0.0.1')
})
定义多个全局中间件
使用app.use()连续定义多个全局中间件。客户端请求到达服务器之后 ,会按照中间件的顺序一次进行调用,所以中间件先后很重要
const express=require('express')
//创建服务器
const app=express()
app.use(function(req,res,next){
console.log('第一个中间件')
next()//把流转关系 转交给下一个中间件或者路由---只要这中间件中的业务处理完毕必须在最后调用next函数
})
app.use(function(req,res,next){
console.log('第二个中间件')
next()//把流转关系 转交给下一个中间件或者路由---只要这中间件中的业务处理完毕必须在最后调用next函数
})
//定义一个路由
app.get('/',(req,res)=>{
res.send('响应客户端127.0.0.1/的get请求')
})
app.listen(80,()=>{
console.log('服务器启动成功 127.0.0.1')
})