express 中间件

中间件是express的一大特色,一个express应用就是由众多的中间件来完成。中间件其实就是函数。
一个简单的例子:

app.use(function (req,res,next) {
    console.log('time ' + Date.now())
    next()
})

从上面这个函数来看,中间件接受三个参数:
req – 请求对象
res – 响应对象
next – 下一个要被调用的中间件

Express 对中间件的分类:

  1. 应用程序级中间件
// 1.不关心请求路径和请求方法的中间件(如上实例代码)

// 2.关心路径,不关心请求方法
app.use('/',function (req,res) {
   console.log(req.method)
   res.send('index.js')
})

// 3.关心请求路径及方法
app.get()
app.post()
...

				

说明:当请求进来,会从第一个中间件开始进行匹配
如果匹配,则进来,如果请求进入中间件之后,没有调用 next 则代码会停在当前中间件,如果调用了 next 则继续向后找到第一个匹配的中间件;如果不匹配,则继续判断匹配下一个中间件 。

当一个请求进入一个中间件之后,如果不调用 next 则会停留在当前中间件。所以 next 是一个方法,用来调用下一个中间件的,注意调用 next 方法也是要匹配的(不是调用紧挨着的那个)

  1. 路由器级中间件
    工作方式与应用程序及中间件相同,但它绑定到的是一个实例express.Router()。我们使用router.use()和router.METHOD()函数加载路由器级中间件。

var app = express()
var router = express.Router()

// predicate the router with a check and bail out when needed
router.use(function (req, res, next) {
 if (!req.headers['x-auth']) return next('router')
 next()
})

router.get('/', function (req, res) {
 res.send('hello, user!')
})

// use the router and 401 anything falling through
app.use('/admin', router, function (req, res) {
 res.sendStatus(401)
})


  1. 错误处理中间件
   app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!')
})
  1. 内置中间件

express.static提供静态资源,如HTML文件,图像等。
express.json使用JSON有效负载解析传入的请求。注意:适用于Express 4.16.0+
express.urlencoded用URL编码的有效负载解析传入的请求。注意:适用于Express 4.16.0+

  1. 第三方中间件
    如: express-session等

你可能感兴趣的:(express,日常总结)