express
express概念:express是基于nodejs的HTTPS模块构建出来的一个web应用开发框架,在nodejs之上扩展了 Web 应用所需的基本功能。
本质上express应用就是调用各种中间件。

中间件:一个处理某个功能或模块的函数,一个中间件对应一个要处理的小任务。
功能:
1、修改请求和响应对象
2、终结请求-响应循环
3、调用堆栈中的下一个中间件。

示例:

var express=require("express")  //引入express框架
var app = express()    //创建app应用//app.use() 调用中间件
//如果中间件没有挂载点,无论什么请求都会执行该代码
app.use(function(req,res,next){       
      console.log(req.cookie);
      next();
})// '/admin/:id'是挂载点,当要请求这个路径,就会执行下面的代码  一个中间件栈必须要调用终止请求-响应循环方法
app.use('/admin/:id',function(req,res,next){       
  console.log(req.user.id);
      next();
},function(req,res,next){
      res.end(req.params.id);    // 执行结束方法终止请求-响应循环,(end(),send()..都可以终止)
})// 同一个挂载点,这个永远不会被调用
app.use('/admin/:id',function(req,res,next){       
      res.send('User Info');
})

中间件五大类:
1、应用级中间件
2、路由级中间件
3、错误处理中间件
4、内置中间件
5、第三方中间件

应用级中间件:绑定到app对象上的中间件(app.use()或app.method()),以上示例都是应用级中间件
路由级中间件:绑定到express.Router()对象上的中间件
以上示例改一下就变成路由级

var express=require("express")  
var app = express()
var router = express.Router()
router.use(function (req, res, next) {
    console.log('Time:', Date.now());
    next();
});
// 将路由挂载至应用
app.use('/', router);

路由级中间件和应用级中间件的区别是:
当var app=express()的时候就已经创建了一个application,在application内部就创建了一个Router,大部分对application的操作实际上被重定向到Router了。
例子:
app.use() 相当于 app._router.use()
所以application是Router的封装,Router才是核心

错误处理中间件:有4个参数(err,req,res,next)

app.use(function(err, req, res, next) {
    console.error(err.stack);
    res.status(500).send('Something broke!');
});

内置中间件:express.static 是 Express 唯一内置的中间件。
将静态资源文件所在的目录作为参数传递给 express.static 中间件就可以提供静态资源文件的访问
app.use('/public',express.static('public'));

第三方中间件:
安装并加载一个解析 cookie 的中间件: cookie-parser

var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');// 加载用于解析 cookie 的中间件
app.use(cookieParser());

总结:中间件是一个处理函数

欢迎指正!