简要来说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中间件的概念的更多相关文章

  1. ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

    ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...

  2. ASP.NET MVC随想录——创建自定义的Middleware中间件

    经过前2篇文章的介绍,相信大家已经对OWIN和Katana有了基本的了解,那么这篇文章我将继续OWIN和Katana之旅——创建自定义的Middleware中间件. 何为Middleware中间件 M ...

  3. Startup 和 Middleware(中间件)

    Startup 和 Middleware(中间件) ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Con ...

  4. 创建自定义的Middleware中间件

    创建自定义的Middleware中间件 阅读目录 何为Middleware中间件 使用Inline方式注册Middleware 使用Inline+ AppFunc方式注册Middleware 定义原生 ...

  5. Django中Middleware中间件

    Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...

  6. Django中的MiddleWare中间件

    1. middleware简介 Django的middleware的概念相当于SSH框架里面的filter的概念.中间键的作用就是对所有的request,在request前,和在response后做一 ...

  7. Jerry的CRM Middleware(中间件)文章合集

    我在SAP成都研究院做过的CRM中间件的项目其实并不是很多: 1. 2013年下半年和2014年上半年曾经支持过中联重科和蒙牛的CRM项目相关的中间件问题; 2. 2014年上半年做过一个CRM物料主 ...

  8. Django分析之Middleware中间件

    写了几周的脚本,今天终于开始接触web框架了~学习Python的web框架,那么Django就几乎是必修课了,这次的工作是先打打下手,主要的任务是在setting中添加版本号,在渲染静态css,js的 ...

  9. Express ( MiddleWare/中间件 路由 在 Express 中使用模板引擎 常用API

    A fast, un-opinionated, minimalist web framework for Node.js applications. In general, prefer simply ...

随机推荐

  1. LeetCode之Largest Rectangle in Histogram浅析

    首先上题目 Given n non-negative integers representing the histogram's bar height where the width of each ...

  2. 手动安装m4, autoconf, automake, libtool

    转自http://ruby-china.org/topics/2434 系列文章原载于自己的博客,TOPI.CO (http://topi.co) ,某天不小心就push错啦,懒得从头再来,上传到Ru ...

  3. eclipse error pages打红X的解决方法

    当我在关闭eclipse时,漫长的等待进度条,我情急之下强关了系统.悲催的是再打开eclipse时新建动态web项目时,总是出现error pages打红X问题,程序执行等都不受影响,就是看着不爽.网 ...

  4. Xcode - 知道.001

    1.在xcode7以后,一定要有根视图,否则会报错,程序崩溃,

  5. css实现并列效果

    <a href="#" class="mj-picList"> <div class="mj-picList-pic" s ...

  6. 在Linux上配置xampp后远程访问域名报错

    在Linux上配置xampp后远程访问域名报错: New XAMPP security concept: Access to the requested object is only availabl ...

  7. VBA学习之关于数据透视表的应用

    工作中很多地方需要同时处理多个数据表,而且用数据透视表进行排版,排序,计算字段,一个一个的做非常累,这里给出批量处理的方法. 学习VBA之前最好懂一点点VB的基础知识,因为里面的很多语法问题都是由VB ...

  8. 用命令查看Mysql中数据库、表的空间大小

    要想知道每个数据库的大小的话,步骤如下:1.进入information_schema 数据库(存放了其他的数据库的信息)use information_schema;2.查询所有数据的大小:selec ...

  9. MvcPager 免费开源分页控件3.0版发布!

    MvcPager 3.0版在原2.0版的基础上进行了较大的升级,对MvcPager脚本插件重写并进行了大量优化.修复了部分bug并新增了客户端Javascript API等功能,使用更方便,功能更强大 ...

  10. 纯脚本组装Json格式字符串

    var answerStr = "["; for (var i in answer) { var data = $("input[name=QuestionItem_&q ...