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中中间件的使用方法如出一辙,只是多了一些中间件而已。

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

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

 

自己编写中间件

中间件函数作为插件被放到请求流中(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

posted @ 2013-12-22 10:56  cubika  阅读(2955)  评论(0编辑  收藏  举报