middleware

中间件

  1. function middleware(req, res, next) {
  2. // req.url starts with "/foo"
  3. res.end('Hello from Connect2!\n');
  4. }

说明

  • req是请求
  • res是响应
  • next是如果当前中间件不处理,就让下一个中间件处理

筒子理论

connect里

  1. var connect = require('connect')
  2. var http = require('http')
  3. var app = connect()
  4. // respond to all requests
  5. app.use(function(req, res){
  6. res.end('Hello from Connect!\n');
  7. })
  8. app.use('/2', function fooMiddleware(req, res, next) {
  9. // req.url starts with "/foo"
  10. res.end('Hello from Connect2!\n');
  11. });
  12. //create node.js http server and listen on port
  13. http.createServer(app).listen(3011)

中间件 - 图1

变胖的筒子

express对某个中间件的筒子变胖理论

  1. var express = require('express');
  2. var app = express();
  3. function m1(req, res) {
  4. console.log('m1...');
  5. }
  6. function m2(req, res) {
  7. console.log('m2...');
  8. }
  9. app.get('/', m1, m2, function (req, res) {
  10. res.send('Hello World')
  11. })
  12. // 随机端口3000 - 10000 之间
  13. app.listen(4001)

在这个请求定义中,使用了m1和m2中间件,他们都没有处理具体内容,直接next下一个中间件去处理,即最后的那个匿名函数。

中间件 - 图2

中间件分类:全局和路由里的

  1. var express = require('express');
  2. var app = express();
  3. app.use(function (req, res, next) {
  4. res.send('global middleware....')
  5. })
  6. function m1(req, res) {
  7. console.log('m1...');
  8. }
  9. function m2(req, res) {
  10. console.log('m2...');
  11. }
  12. app.get('/', m1, m2, function (req, res) {
  13. res.send('Hello World')
  14. })
  15. // 随机端口3000 - 10000 之间
  16. app.listen(4001)
  • 全局的,出自connect(筒子)
  • 路由里的,出自express(变胖的筒子)

总结

中间件 - 图3

  • 空项目
  • connect的筒子理论
  • express对某个中间件的筒子变胖理论