express中间件

摘要:
此外,Connect和Express实际上是同一作者。从主页中,我们可以看到它的使用方法与express中的中间件相同,但只有少数更多的中间件。

中间件(Middleware)可以理解为一个对用户请求进行过滤和预处理的东西,它一般不会直接对客户端进行响应,而是将处理之后的结果传递下去。

Express支持的中间件

在express官网中可以看出express本身支持若干中间件:

  1. basicAuth:基本的身份认证功能,处理之后可以通过req.user属性访问被认证的用户对象
  2. bodyParser:完成请求体消息的三种转换功能:json(),urlencoded(),multipart(),这三个中间件可以分别使用,而bodyParse是对三者的统一封装
  3. compress:对response数据进行压缩处理
  4. cookieParser:对Cookie头进行处理,然后通过req.cookies属性来访问所有cookie对象
  5. cookieSession:提供对Session的支持。我们知道大部分的服务器Session其实是通过cookie来实现的。服务器端通过判断客户端发送的两次请求中某一个cookie项的值是否相同来认定是否是同一个session。处理之后可以通过req.session属性访问session对象
  6. csrf:对CSRF(跨域请求伪造)保护的支持。CSRF是指伪造他人请求发送给受攻击的站点。其防御方法有验证HTTP Refer字段;在请求地址中添加token并进行验证;在HTTP头中自定义属性并进行验证等等。该中间件就是通过生成token来解决的,生成的token可以通过req.csrfToken()来进行访问
  7. directory:使服务器的某项目录能够为外界所访问
Connect中间件框架

其实,express中的中间件就是使用了Connect中间件框架。它们是一种包含关系。此外,Connect和Express其实是同一个作者。

connect支持的中间件就非常多了。从主页中就可以看出:

express中间件第1张

其使用方法跟express中中间件的使用方法如出一辙,只是多了一些中间件而已。

园友luics将Connect中间件分为了三个部分:

  1. Pre-Request 通常用来改写request的原始数据
  2. Request/Response 大部分中间件都在这里,功能各异
  3. Post-Response 全局异常处理,改写response数据等

express中间件第2张

自己编写中间件

中间件函数作为插件被放到请求流中(request flow),在Connnect里使用 connect.use(),或在express中使用app.use()。一个自定义的中间件模块需要返回一个方法,这个方法理想情况下接受 req,res或next三个参数。

module.exports = function() {  
      
    return function(req, res, next) {  
     // Do Something to `req' or `res'

    // Pass to next middleware
    return next();

    // Error occurred and pass to error handler
    return next(err);

    // Intercept the request and make response directly without pass to next middleware
    return res.send(XXX);

    // Hook on `res.end' to perform some decoration on response
    var end_ = res.end;
    res.end = function (text) {
         // Do something to response data ...
         end_.bind(this)(arg1, arg2, ...);
    };

  }
}

参考资料:

http://www.cnblogs.com/luics/archive/2012/11/28/2775206.html

免责声明:文章转载自《express中间件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇利用Windows 2003系统中实现两个网段的路由【原】[webkit移动开发笔记]之无法自动播放的audio元素下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Wpf发送接收 win32消息

#region WPF发送和接收win32消息 public const int WM_GETTEXT = 0x0D; public const int WM_SETTEXT = 0x0C; public const int WM_SIZEING = 0x0214; public const...

selenium cookie登录

前言 爬虫方向的小伙伴们都知道网页爬虫经常遇到的问题就是登录账户,有些简单的网站我们可以简单的send key来输入账户密码就可以登录,但是有很多网站需要验证码之类的就不太好用了,这时候就体现到了cookie登录的优点了,前段时间网上搜了搜,发现没有什么完整的教程,本文就使用selenium来cookie登录为例做一个简单的教程。 环境准备 python...

【Win32 API学习】RegisterWindowMessage小记

RegisterWindowMessage函数定义了一个新的窗口消息,该消息在系统范围内是唯一的。通常调用SendMessage或者PostMessage函数时可以使用该函数返回的消息值。 函数原型:   UINT RegisterWindowMessage( lpString);参数说明:   lpString指向一个以NULL结束的字符串,指定待注册的消...

iOS12中推送通知新特性

转载自 FlyOceanFish 序言 众所周知,iOS中消息推送扮演了不可或缺的位置。不管是本地通知还是远程通知无时不刻的在影响着我们的用户体验,以致于在iOS10的时候苹果对推送大规模重构,独立了已UserNotifications和UserNotificationsUI两个单独的framework,可见重要性一斑。针对于WWDC18苹果又给我们带来了...

《精通并发与Netty》学习笔记(13

一、粘包/拆包概念 TCP是一个“流”协议,所谓流,就是没有界限的一长串二进制数据。TCP作为传输层协议并不不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的划分,所以在业务上认为是一个完整的包,可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。 一般所谓的TCP粘包是...

Looper.prepare()

Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,从消息队列里取消息,处理消息。注:写在Looper.loop()之后的代码不会被立即执行,当调用后mHandler.get...