express 中间件的理解
nodejs(这指express) 中间件
铺垫:
一个请求发送到服务器,要经历一个生命周期,服务端要: 监听请求-解析请求-响应请求,服务器在处理这一过程的时候,有时候就很复杂了,将这些复杂的业务拆开成一个个子部分,子部分就是一个个中间件。对于处理请求来说,在响应发出之前,可以对请求和该级响应做一些操作,并且可以将这个处理结果传递给下一个处理步骤
express 这样描述中间件的:
执行任何代码。
修改请求和响应对象。
终结请求-响应循环。
调用堆栈中的下一个中间件
分类:
应用级中间件
路由级中间件
错误处理中间件
内置中间件
第三方中间件
举个栗子:
var express = require('express');
var app = express();
app.get('/', function(req, res, next) {
// req 修改请求
// res 响应对象
next(); // 当前中间件函数没有结束请求/响应循环, 调用next(),
// 将控制权传递给下一个中间件函数继续往下处理,否则页面到此会被挂起
});
app.get('/end', function(req, res) {
res.send('程序到我这里就结束了,没有next方法');
})
app.listen(3000);
上面next()的说明: next()函数不是nodejs或者express的函数,而是传递中间件函数的第三变量,它是一个统称,可以为任意名称,为了名称统一,不造成混淆,约定为next(),调用它之后会将调用应用程序中的下一个中间件程序
中间件的使用说明:
var express = require('express');
var app = express();
app.use(requestTime); //
var requestTime = function(req,res, next) {
req.requestTime = new Date().getTime();
next();
}
app.get('/time', function(req, res, next) {
var timeText = '当前时间为:';
timeText = timeText + req.requestTime; // 这里的req.requestTime 是上一个中间件函数传递过来的,
// 一个业务处理流程,多个中间件函数对请求 req进行修改处理,并且通过next() 传递给下一个中间件函数,
// 这样下面的中间件函数都能拿到上一个中间件函数处理的结果
res.send(timeText);
});
app.get('/end', function(req, res) {
res.send('程序到我这里就结束了,没有next方法');
})
app.listen(3000);
下面是多个中间件函数,在各自函数中处理请求和响应的例子:
具体
var express = require('express');
var app = express();
var middleA = function (req, res, next) {
req.useOne = '应用程序经过了 middleA ';
res.useOne = 'middleA 处理后的数据 middleA';
req.paramasQuery = 1
// console.log(req.useOne, req.useTwo, req.useThree);
next();
}
var middleB = function (req, res, next) {
req.useTwo = '应用程序又经过了 middleB';
res.useTwo = 'middleB 处理后的数据 middleB';
req.paramasQuery += 1;
console.log(res.useOne, res.useTwo, res.useThree);
next();
}
var middleC = function (req, res, next) {
req.useThree = '应用程序又经过了 middleC';
res.useThree = 'middleC 处理后的数据 middleC';
req.paramasQuery += 2;
console.log(res.useOne, res.useTwo, res.useThree);
console.log(req.paramasQuery);
next();
}
app.use(middleA);
app.use(middleB);
app.use(middleC);
app.get('/', function(req, res, next) {
console.log(req.useOne, req.useTwo, req.useThree);
// 应用程序经过了 middleA 应用程序又经过了 middleB 应用程序又经过了 middleC
// 上面的req里面的参数就是在 不同的中间件函数中处理出来的
console.log(res.useOne, res.useTwo, res.useThree);
// middleA 处理后的数据 middleA middleB 处理后的数据 middleB middleC 处理后的数据 middleC
// 上面的res的响应参数也是在上面一个个中间件的响应res中逐步处理 累加而得
req.paramasQuery += 3;
// req中paramasQuery的参数经过中间不同的中间件函数处理,已经累加到7,
// 同理对于res 采用相同的处理方式,也可以达到这样的效果
// 我们以此可以推出,如果处理一个很复杂的程序时,我们一个中间件函数只处理一个步骤,
// 并且可以把该步骤处理后的结果,传递给下一个中间件函数处理,
// 一种流水线的处理方式,职责专一,效率很快
res.send('req.paramasQuery 经过不同的中间件处理后的结果是:' + req.paramasQuery); // 7
})
app.listen(5000, function() {
console.log('5000 端口启动了')
})
总结:
express 中间件函数,帮助拆解主程序的业务逻辑,并且每一个的中间件函数处理的结果都会传递给下一个中间件函数。想象一下工厂上流水线工人,在清洗一个箱子的一个场景。
第一个人清洗侧面,第二个人清洗底面,第三个人清洗顶面,。。。,这条流水线结束后,箱子也就清洗干净了。
各做各的,不相互影响,又彼此协作。
express 中间件的理解的更多相关文章
- express中间件的理解
参考 :https://blog.csdn.net/huang100qi/article/details/80220012 Express中间件分为三种内置中间件.自定义中间件.第三方中间件 可以与n ...
- 理解Express 中间件
Express 中间件 Express程序基本上是一系列中间件函数的调用.中间件就是一个函数, 接受 req.res.next几个参数. 中间件函数可以执行任何代码, 对请求和响应对象进行修改, 结束 ...
- Express中间件的意思 next()的方法
一.什么是express?Express是一个简洁.灵活的noode.jsWeb应用开发框架,它提供一系列强大的特性,帮助你创建各种Web和移动设备应用.Express项目的底层由许多的中间件在协同工 ...
- Express中间件的原理及实现
在Node开发中免不了要使用框架,比如express.koa.koa2拿使用的最多的express来举例子开发中肯定会用到很多类似于下面的这种代码 var express = require('exp ...
- 浅析express以及express中间件
一.express: 1.express: Express是什么? Express是基于node.js平台的web应用开发框架: 作用:可以实现快速搭建骨架: 优点:开发web应用更加方便,更加快捷. ...
- Express中间件简单的实现原理
上一篇理解Express的使用之后, 再总结一篇Express中间件的简单实现原理. 我们知道Express中间件就是一个个的函数, 那么怎么让这些函数有序的执行呢? 那就需要我们调用 next 函数 ...
- express 中间件的简单应用与实现
express 中间件的简单应用与实现 看了慕课网双越老师的课之后结合自己的理解做了一些简单的总结,如有不恰当之处,欢迎指正. 提到 express 就不得不提到中间件,接下来就简单的介绍一下 exp ...
- Express中间件原理详解
前言 Express和Koa是目前最主流的基于node的web开发框架,他们的开发者是同一班人马.貌似现在Koa更加流行,但是仍然有大量的项目在使用Express,所以我想通过这篇文章说说Expres ...
- Node.js连接Mysql,并把连接集成进Express中间件中
引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以 ...
随机推荐
- UnitOfWork
数据访问层之UnitOfWork 接上文 项目架构开发:数据访问层之IQuery 本章我们继续IUnitOfWork的开发,从之前的IRepository接口中就可以看出,我们并没有处理单元事务, ...
- dwc_otg驱动 "BUG: sleeping function called from invalid context at mm/page_alloc.c"
方案商的开发板上otg功能只能做device,硬件看过后说没有5v供电,加上后能够识别U盘了,但是内核报了错 [ 3.264000] usb 2-1: new high-speed USB devic ...
- 0-1分布(伯努利分布)、n 重伯努利分布(二项分布)
1. 0-1 分布(伯努利分布) 0-1分布又名两点分布,或叫伯努利分布. P{X=k}=pk(1−p)1−k 其中 k=0,1. 伯努利分布未必一定是 0-1 分布,也可能是 a-b 分布,只需满足 ...
- 如何获得iframe中元素的值
在Web开发时,很多时候会遇到一个问题.我在一个页面嵌入了iframe,并且我想获得这个iframe页面某个元素的值.那么该如何实现这个需求呢? 先来看下演示: 效果演示 iframe1中文本 ...
- 向西项目管理工具Git一片
前言 Git 这个词相信大家并不陌生,做开发的童鞋们每天都离不开它.当然,假设你的项目中没实用到分布式,那么,你可能从未用过 Git,当然也可能没听过.只是,这不是重点,重点是这一篇文章,我们将一起谈 ...
- OpenCV实现朴素贝叶斯分类器诊断病情
贝叶斯定理由英国数学家托马斯.贝叶斯(Thomas Baves)在1763提出,因此得名贝叶斯定理.贝叶斯定理也称贝叶斯推理,是关于随机事件的条件概率的一则定理. 对于两个事件A和B,事件A发生则B也 ...
- WinForm导出文件
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 ...
- ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 属性路由 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 属性路由 经过前面章节的学习,想必你已经对 ASP.NET Core ...
- WPF自定义LED风格数字显示控件
原文:WPF自定义LED风格数字显示控件 版权声明:本文为博主原创文章,转载请注明作者和出处 https://blog.csdn.net/ZZZWWWPPP11199988899/article/de ...
- WPF 呼吸灯特效
原文:WPF 呼吸灯特效 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014117094/article/details/46738621 pa ...