Express中间件:用于处理请求的,本质就是个函数,类似请求拦截,处理不同请求的拦截
详细看下面代码
const express = require(\'express\');
const app = express();
const fs = require(\'fs\');
// 中间件:处理请求的,本质就是个函数,类似请求拦截 app.all() 所有请求都会进入
/**
* 1、在Express中,对中间件有几种分类
* 不关心请求路劲和请求方法的中间件
* 也就是说任何请求都会进入这个中间件
* 中间件本身是一个方法,该方法接收3个参数
* request 请求对象
* response 响应对象
* next 下一个中间件(中间件可以有多个)
* 2、当一个请求进入一个中间件之后,如果不调用next 则会停留在当前中间件
* 所以next是一个方法,用来调用下一个中间件
* 3、next 方法也是要调用匹配的(不是调用紧挨着的中间件)
*/
app.use(function(req,res,next){
console.log(\'请求进来了1\');
// 执行下一个中间件 ↓
next();
})
app.use(function(req,res,next){
console.log(\'请求进来了2\');
next();
})
// ========================== 举例:第三方插件 body-parse 用于解析post请求 ==================================
// 使用方法 app.use(\'bodyParse\');
app.use(function(req,res,next){
// 判断请求方式为post,解析请求参数,在req上添加属性 body为参数
req.body = {
id:\'1\'
}
// 调用下一个中间件
next();
})
// 下面展示post请求
app.post(\'/post\',function(req,res,next){
// 这里就可以获取到body-parse 解析的参数了
console.log(req.body);
})
// ========================== 举例:第三方插件 body-parse 用于解析post请求 ==================================
// 以 /xxx 开头的中间件 例如: localhost:5000/a/login (不严格,只判断开头为/a的进入)
app.use(\'/a\',function(req,res,next){
console.log(req.url)
})
// 除了以上中间件之外,还有一种最常用的
// 严格匹配请求方法和请求路径的中间件
// app.get
// app.post
app.get(\'/\',function(req,res,next){
console.log(\'/\');
})
app.post(\'/a\',function(req,res,next){
console.log(\'/a\');
})
// 错误处理
app.get(\'/aaa\',function(req,res,next){
fs.readerFile(\'/aa/bb/cc\',(err,data)=>{
if(err){
// 当我们调用next传入了参数,就会跳过其他中间件直接进入错误处理中间件
next(err);
}
})
})
// 错误处理中间件 错误中间件有4个参数,当调用 next(err) 传入了参数 就会进入错误处理中间件
app.use(function (err, req, res, next) {
console.error(err)
res.status(500).send(\'Something broke!\')
})
// app.get、app.post、express.Router 都是中间件
// 如果没有没有匹配的中间件,则Express 会默认输出:Cannot GET 路径
app.listen(5000,()=>{
console.log(\'服务启动成功\')
})