Node——express 中间件原理

function express() {
    var funcs = []; // 待执行的函数数组
    var app = function (req, res) {
        var i = 0;
        function next() {
            var task = funcs[i++]; // 取出函数数组里的下一个函数
            if (!task) { // 如果函数不存在,return
                return;
            }
            task(req, res, next); // 否则,执行下一个函数
        }
        next();
    }
    app.use = function (task) {
        funcs.push(task);
    }

    return app; // 返回实例
}

// 下面是测试case

var app = express();
http.createServer(app).listen(‘3000‘, function () {
    console.log(‘listening 3000....‘);
});

function middlewareA(req, res, next) {
    console.log(‘middlewareA before next()‘);
    next();
    console.log(‘middlewareA after next()‘);
}

function middlewareB(req, res, next) {
    console.log(‘middlewareB before next()‘);
    next();
    console.log(‘middlewareB after next()‘);
}

function middlewareC(req, res, next) {
    console.log(‘middlewareC before next()‘);
    next();
    console.log(‘middlewareC after next()‘);
}

app.use(middlewareA);
app.use(middlewareB);
app.use(middlewareC);

app() //模拟一个http请求
  • express() 执行之后返回的是一个函数,函数作为对象也可以拥有属性,所以添加了 use 属性,use 的作用是往函数数组 funcs 中添加回调函数
  • 当我们用 app() 模拟一次 http 请求,程序会走 next(),当我们自定义的中间件中有 next 关键字,之后程序会一直处于递归状态,直到 return 或者执行到函数末尾,然后逐一跳出每层递归函数
  • 这样的递归结构,需要三个东西支撑:req、res、next,因为 req、res 保证了上下文一致,而 next 函数保证了中间件的往下执行
  • 帮助文档:https://www.jianshu.com/p/797a4e38fe77

原文地址:https://www.cnblogs.com/cnloop/p/9430190.html

时间: 2024-08-30 03:21:22

Node——express 中间件原理的相关文章

express中间件原理 && 实现

一.什么是express中间件? 什么是express中间件呢? 我们肯定都听说过这个词,并且,如果你用过express,那么你就一定用过express中间件,如下: var express = require('express'); var app = express(); app.listen(3000, function () { console.log('listening 3000') }); app.use(middleware1); app.use(middleware2); ap

Node.js连接Mysql,并把连接集成进Express中间件中

引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以单独对mysql配置,也可以把connection集成到express中间件中. 最后送上一个node.js 连接各种主流数据库示例代码. 前提条件 1.安装mysql对应的驱动,npm install mysql 2.安装第三方插件express-connection, npm install e

Express中间件简单的实现原理

上一篇理解Express的使用之后, 再总结一篇Express中间件的简单实现原理. 我们知道Express中间件就是一个个的函数, 那么怎么让这些函数有序的执行呢? 那就需要我们调用 next 函数.其实 next函数调用的就是下一个中间件函数. 以下代码实现了简单的 app.use 注册中间件, 以及 get.post方式的中间件.其他请求方式的中间件实现同理 核心代码: const next = () => { const stack = stacks.shift() if(stack)

使用node+express+mongodb实现用户注册、登录和验证功能

无论是手机端还是pc端,几乎都包含登录注册方面功能,今天就使用node+express+mongodb实现一套登录注册功能,这里需要自己去安装MongoDB环境,如果没有安装可以看这篇关于MongoDB安装的步https://www.cnblogs.com/zhoulifeng/p/9429597.html 实现功能 注册 密码加密 登录 校验 token处理 1.环境搭建运行 在目录里安装express和mongoose,并在根目录创建server.js文件和models文件, 在server

Koa框架实践与中间件原理剖析

Koa框架实践与中间件原理剖析 最近尝试用了一下Koa,并在此记录一下使用心得. 注意:本文是以读者已经了解Generator和Promise为前提在写的,因为单单Generator和Promise都能够写一篇博文来讲解介绍了,所以就不在这里赘述.网上资料很多,可以自行查阅. Koa是Express原班人马打造的一个更小,基于nodejs平台的下一代web开发框架.Koa的精妙之处就在于其使用generator和promise,实现了一种更为有趣的中间件系统,Koa的中间件是一系列generat

node+express+mongodb初体验

从去年11月份到现在,一直想去学习nodejs,在这段时间体验了gulp.grunt.yeomen,fis,但是对于nodejs深入的去学习,去开发项目总是断断续续. 今天花了一天的时间,去了解整理整个学习思路,以下是我的学习分享,是入门级学习体验适合node+mongodb开发小白,node已玩过很久的大神这篇文章可能不适合. 开篇来个例子: 客户端表单页面: <!DOCTYPE HTML> <html lang="en-US"> <head> &

node+express实现文件上传功能

在进行node web开发时,我们可能经常遇到上传文件的问题,这一块如果我们没有经验,可能会遇到很多坑,下面我将跟大家分享一下,实现文件上传的一些方式. 一.node+express文件上传的常用方式 通过一段时间的查阅资料.摸索,我发现实现上传的方式有:1.express中间件multer模块(此效率最高,在express3.x原生支持,到了express4.x独立成一个模块了),2.connect-multiparty模块(但现在官方不推荐),3.使用multiparty模块实现(此方法比较

运用 node + express + http-proxy-middleware 实现前端代理跨域的 详细实例哦

一.你需要准备的知识储备 运用node的包管理工具npm 安装插件.中间件的基本知识: 2.express框架的一些基础知识,知道如何建立一个小的服务器:晓得如何快速的搭建一个express框架小应用: 3.还需要一些前端的基础小知识,html\css\js\jquery 4.最重要的一点就是知道怎么产生的跨域,要是不知道怎么产生的跨域,如何知道需要去破解它呢? 二.实例的代码分析 场景分析,我本地的域名为<http.localhost:8080>,我要请求的地址是<http.****.

express中间件的理解

官网对它的阐述是这样的: "Express是一个自身功能极简,完全是路由和中间件构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件." 由此可见,中间件在Express开发中的重要性,因此这里我们就专门来总结一下中间件. 一.中间件结构 app.use([path],function) path:是路由的url,默认参数'/',意义是路由到这个路径时使用这个中间件 function:中间件函数 这个中间件函数可以理解为就是function(request,