1.中间件就是匹配路由之前和匹配路由之后做的一系列操作
2.应用级中间件
使用app.use() 和 app.methods(get、post、put等)将应用级中间件绑定到app实例上
如果当前的中间件功能没有结束请求-响应周期,则必须调用next()将控制权传递给下一个中间件功能。否则,该请求将被挂起。
匹配所有路由
app.use(function(req,res,next){//匹配所有路由
console.log(new Date()) //每次匹配路由之前都会打印当前日期
next() //路由继续向下匹配
})
匹配单个路由
app.use('/news',function(req,res,next){
console.log('匹配的单个路由,只匹配news路由')
next()
})
app.get('/news',function(req,res){
res.send('news路由')
})
此示例显示了/user/:id路径上安装的中间件功能。该函数针对/user/:id路径上的任何类型的HTTP请求执行。
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method)
next()
})
3.路由中间件
app.get('/test',function(req,res){
console.log('路由中间件')
})
app.get('/test',function(req,res){
res.send('test')
})
上面的代码在打印test之后不会继续向下匹配,这时就需要路由中间件
app.get('/test',function(req,res.next){
console.log('路由中间件')
next()
})
app.get('/test',function(req,res){
res.send('test')
})
4.错误处理中间件(需要写在最下面,即其它路由匹配之后)
app.use((req,res)=>{
res.status(404).send('这时404表示路由没有匹配到')
})
5.内置中间件
托管静态页面
app.use(express.static('public'))
配置虚拟目录
app.use('/static',express.static('public'))
6.第三方中间件
body-parser中间件(处理post请求)
1.安装
npm install body-parser --save
2.引入模块
const bodyParser = require('body-parser')
3.配置
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
例:
app.get('/login',function(req,res){
res.render('login')
})
app.post('/dologin',function(req,res){
console.log(req.body) //{ username: 'jiangwei', pwd: '123456' }
})
login.ejs