express中间件加载

作者: MarlonFan | 来源:发表于2016-07-21 13:33 被阅读204次

middleware, express中几乎所有的东西都是通过中间件来完成的.大量采用第三方的中间件.但是它是怎样来工作的呢,让我们来一步一步揭开它.

从代码上看上去第一眼就是app.use()了.在使用express-generator构建好一个express应用后,在app.js文件下可以看到以下代码。(因代码较多,有节选).

var express = require('express');
var bodyParser = require('body-parser');
var routes = require('./routes/index');

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

从上面代码中很显然可以看出app.use()是用来加载这些中间件的.翻文档看,use()接受两个参数,第一个path为可选项,第二个就是中间件的函数了.

那我们就试着自己写一个东西调试一下能不能执行到了.

app.use(express.static(path.join(__dirname, 'public')));

app.use(function(req, res, next) {
  console.log('11');
  next();
})

app.use(function(req, res, next) {
  console.log(22);
  next();
})

app.use('/', routes);

在这样的情况下,我们看到的响应还是正确的,并且在console里log出了11,22.

那我们试着把console.log('11')里面的next()取消掉呢,这时候命令行里console出了11后之后的全部不执行了,连路由都没有响应了.

ok,到这里的时候,我们搞明白了,app.use()里面的东西是依次执行的,那么我们可以把它想象成为一个tasks,在请求过来的时候依次通过next()调用之前注册好的中间件过滤一遍.使用 app.use() “定义的”中间件的顺序非常重要,它们将会顺序执行,use的先后顺序决定了中间件的优先级。 比如说通常 express.logger()是最先使用的一个组件,纪录每一个请求.

而在没有next()下,是无法继续传递下去的.

那么我们搞明白这个中间件是怎么加载的了,但是这个next()又是怎么实现的呢?我们试着一步一步自己实现一个简单的next()来看看.

var http = require('http');

function express() {
    var fns = [];
    
    var expr = function(req, res) {
        var i = 0;
        function next() {
            var task = fns[i++];
            if ( ! task) {
                return;
            }
            task(req, res, next);
        }
        next();
    }
    
    expr.use = function(fn) {
        fns.push(fn);
    }
    
    return expr;
}

var app = express();

app.use(function(req, res, next) {
    console.log('req');
    next();
})

app.use(function(req, res, next) {
    console.log('done');
    next();
})

app.use(function(req, res, next) {
    res.end('over');
    next();
})

http.createServer(app).listen('3000');

这样就可以在use里添加你想添加的各种中间件啦~~~

相关文章

  • Express中间件

    app.use() 在express中,app.use 加载用于处理http请求的middleware(中间件),...

  • express中间件加载

    middleware, express中几乎所有的东西都是通过中间件来完成的.大量采用第三方的中间件.但是它是怎样...

  • Express中间件

    Express框架是由路由和中间件构成的一个web开发框架。 1. Express 中间件 中间件是Express...

  • day07-node-中间件

    案例:结构: Express中的中间件: 中间件:处理请求的,本质就是个函数 在 Express 中,对中间件有几...

  • koa.js的使用(koa2)

    koa与Express简单比较Express connect 中间件 封装了 路由、视图,koa co中间件 不包...

  • Express

    Express express与ejs 静态服务 中间件 第三方中间件 Cookie Session expres...

  • 跟我一起学Express之session、redis、登录验证

    上节我们说到,express中间件,并简单实现了我们自己的中间件,按照小编自己的理解 express就是靠中间件为...

  • Express API 总结

    1、express 相关 API: express.json(options)这是Express中内置的中间件功能...

  • 访问静态文件 static-file 中间件

    作为express 中间件使用

  • 模板

    express: web 框架 express-session: session 中间件 connect-m...

网友评论

    本文标题:express中间件加载

    本文链接:https://www.haomeiwen.com/subject/iqgvjttx.html