nodejs框架 Express中间件理解
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('服务启动成功') })