middleware中间件的概念
简要来说express就是一个由路由和中间件构成的 web 开发框架。
当express服务收到客户端的请求时,会通过一组函数来处理请求。
这些函数用于解析请求体数据,处理错误,或者负责返回各种情况对应的消息,这种函数就叫中间件。
express中的中间件函数形如:
app.use(function middleware1(req, res, next){
// logic
});
req是请求体,附带着各种请求信息的属性,res附带返回信息的一些方法。
每个中间件应该只处理一种情况,并且,这些函数参数中的req是同一个对象。
因此,前面的中间件如果修改了req,后面的会得到修改后的对象。
当中间件接收到的req已经处理完了,或是没有达到处理条件,就调用next方法跳到下一个中间件处理。
如果既没调用res返回信息,也没调用next跳过,服务就会处于挂起状态。
默认的,如果一个请求跳过了所有中间件也没有得到返回,express会返回500返回码。
一个完整的事例
var express = require('express');
var app = express();
app.use(function(req,res,next){
// 这里可以访问req.body 来查看请求的参数
// 通过调用res.send() 来发送信息
// 没有该中间件要处理的情况 调用next跳到下一个中间件
});
当然,express在这基础上做了一些封装,减少了代码量。
例如要限定中间件所处理的uri,可以这么写
app.use('/requestURI', function(req,res,next){
// 这里当请求的uri跟指定uri不符,自动跳过该中间件
});
除了uri外,还可以根据请求方法来限制
app.use('/requestURI', function(req, res, next){
if('get' !== req.method.toLowercase()) next();
// your logic
});
相当于
app.get('/requestURI', function(req, res, next){
// your logic
});
组合起来
app.get('/requestURI', function(req, res, next){
// your logic
});
express支持get, post, put, delete等动词方法。
中间件对参数的支持。
当我们需要在uri中加入查询参数时,可以这么写
app.use('/requireURI/:qurey', functinor(req, res, next){
console.log(req.params.qures);
});
通过express我们可以快速开发一个web应用。
middleware中间件的概念的更多相关文章
- ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)
ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...
- ASP.NET MVC随想录——创建自定义的Middleware中间件
经过前2篇文章的介绍,相信大家已经对OWIN和Katana有了基本的了解,那么这篇文章我将继续OWIN和Katana之旅——创建自定义的Middleware中间件. 何为Middleware中间件 M ...
- Startup 和 Middleware(中间件)
Startup 和 Middleware(中间件) ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Con ...
- 创建自定义的Middleware中间件
创建自定义的Middleware中间件 阅读目录 何为Middleware中间件 使用Inline方式注册Middleware 使用Inline+ AppFunc方式注册Middleware 定义原生 ...
- Django中Middleware中间件
Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...
- Django中的MiddleWare中间件
1. middleware简介 Django的middleware的概念相当于SSH框架里面的filter的概念.中间键的作用就是对所有的request,在request前,和在response后做一 ...
- Jerry的CRM Middleware(中间件)文章合集
我在SAP成都研究院做过的CRM中间件的项目其实并不是很多: 1. 2013年下半年和2014年上半年曾经支持过中联重科和蒙牛的CRM项目相关的中间件问题; 2. 2014年上半年做过一个CRM物料主 ...
- Django分析之Middleware中间件
写了几周的脚本,今天终于开始接触web框架了~学习Python的web框架,那么Django就几乎是必修课了,这次的工作是先打打下手,主要的任务是在setting中添加版本号,在渲染静态css,js的 ...
- Express ( MiddleWare/中间件 路由 在 Express 中使用模板引擎 常用API
A fast, un-opinionated, minimalist web framework for Node.js applications. In general, prefer simply ...
随机推荐
- jquery 中substring,substr,split的用法
substring 方法 返回位于 String 对象中指定位置的子字符串. strVariable.substring(start, end) 参数 start 指明子字符串的起始位置,该索引从 0 ...
- Spring+quartz 实现定时任务job集群配置
为什么要有集群定时任务? 因为如果多server都触发相同任务,又同时执行,那在99%的场景都是不适合的.比如银行每晚24:00都要汇总营业额.像下面3台server同时进行汇总,最终计算结果可能是真 ...
- extern关键字
1.extern "C" void func(){...} extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其 ...
- 十.oc内存管理
引用百度百科图 栈(stack)又名堆栈. 栈定义:栈是限定仅在表头进行插入和删除操作的线性表(有序).(又称:后进先出表) (动态)数据展示存储的地方.(举例:升降电梯)特点:先进后出(FILO—F ...
- 在Android项目中引入MuPdf
由于公司手机App要加入一个附件查看功能,需要查看PDF文件,在网上找了许多第三方工具,最后选择了MuPDF. 更多第三方工具可以查看大神总结的:http://www.cnblogs.com/poke ...
- UpdatePanel 中 导出Excel按钮
UpdatePanel 中 导出Excel按钮 要加 Triggers </ContentTemplate> <Triggers> <asp:PostBackTrigge ...
- A*搜索
1,从点A开始,并且把它作为待处理点存入一个"开启列表".开启列表就像一张购物清单.尽管现在列表里只有一个元素,但以后就会多起来.你的路径可能会通过它包含的方格,也可能不会.基本上 ...
- 给div设置background-color: rgba(0, 0, 0, 0.2)属性,并加了css3动画--opacity动画淡出动画,之后div子元素的字体会抖一下
问题:给div设置background-color: rgba(0, 0, 0, 0.2)属性,并加了css3动画--opacity动画淡出动画,之后div子元素的字体会抖一下: 解决:animati ...
- Unity 3D
Assets(模型.贴图.脚本) Library(快捷方式.暂存文件) ProjectSettings(设置信息) Temp(临时文件) Generate Colliders(是否碰撞) Terrai ...
- GPU高性能计算-CUDA
前段时间有个同学的毕设是搞并行计算的,他基本不懂编程把我拉过去帮忙,我之前也没弄过,帮着搞了2天.先把代码贴上去,等有时间在把详细补充一些内容. CUDA编程主要是利用了显卡优越的并行计算能力,把一个 ...