中间件长什么样子

在express中,中间件是非常重要的概念。一个请求,从浏览器发起,到服务端返回,生命周期大概是下面这样子。

浏览器发起请求 -> 服务端收到请求 -> 中间件A -> 中间件B -> … -> 服务端返回

对pipeline有所了解的同学应该对上面的处理方式不陌生。

如果不了解也没关系,我们直接来看下,一个最简单中间件是什么样子的。

  • req:请求对象。可以从中获取请求相关信息,比如访问地址等。(浏览器 —> 服务器)

  • res:响应对象。可以向浏览器返回响应内容,比如返回HTML页面。(服务器 —> 浏览器)

  • next:一个函数。目前仅需要知道,next() 被调用时,控制权就会从当前中间件,转移到下一个中间件。

  1. function(req, res, next){
  2. console.log('打印一些日志');
  3. next();
  4. }

下面就看实际的例子

中间件的例子

看下面代码示例(代码),用户访问 \/hello 路径时,服务端先 1、打印日志 2、访问数据库 3、最后才返回网页。

这三个步骤,可以拆分成三个中间件,如下所示,非常简单。结构更清晰,同时方便拆分组合。

比如某一天,不想打印访问日志了,把第一个中间件删掉就行。

  1. var express = require('express');
  2. var app = express();
  3. app.get('/hello', function(req, res, next){
  4. console.log('打印访问日志');
  5. next();
  6. });
  7. app.get('/hello', function(req, res, next){
  8. console.log('假设我在访问数据库');
  9. next();
  10. });
  11. app.get('/hello', function(req, res, next){
  12. res.send('你好我是中间件!');
  13. });
  14. app.listen(3000);