个人博客

A web front-end programmer's personal blog.

Express API 测试用例整理(四)

Express API 翻译版本点击这里,本文主要对一些方法提供简单的示例,帮助理解使用。

###Middleware中间件部分

express 4.0 发布后,主要的变化是中间件不再被express模块内部支持,这意味着你要自行安装你需要用到的中间。

####basicAuth

用户认证信息中间件,用于对用户进行认证登录。首先要进行npm安装 npm install basic-auth

var express = require('express');
var auth = require('basic-auth');
var app = express();
app.get('/',function(req,res){
	var credentials = auth(req);
	if(!credentials || credentials.name !=='blue' || credentials.pass !== '123'){
		res.statusCode = 401;
		res.setHeader('WWW-Authenticate','Basic realm="example"');
		res.end('Access denied');
	}else{
		res.end('Access ok');
	}
});
app.listen(3000);

basic-auth 会解析 req.authorization.header 到一个 user 对象。如果这个user对象不存在,返回未认证。如果存在则进行用户名和密码的校验,正确后执行next ,反之返回未认证。

####bodyParser

bodyPaser对象公开各种工厂创建的中间件。所有的中间件将填充req.body属性或提供错误的回调。

1、bodyParser.json(options) 返回一个只解析JSON的中间件。这个中间件可以接受任何Unicode编码的请求体,支持GZIP的自动解码编码。 该中间件将解析到的数据信息以body对象的形式插入到回调函数的request对象中,即 req.body

options参数 该中间件接受一个可选的 options 参数对象,该options对象包含以下keys:

  • inflate 当设置为true时,压缩的bodyies将会被展开,默认为true
  • limit 控制请求体的大小,默认为 100kb
  • reviver
  • strict
  • type
  • verify

2、bodyParser.text

返回一个解析字符串的中间件。同样支持GZIP的自动解码编码 该中间件将解析的数据已字符串的形式返回到回调函数的request对象中,作为其中的字符串部分。

options参数 该中间件接受一个可选的 options 参数对象,该options对象包含以下keys:

  • defaultCharset 设置编码类型 默认为 utf-8
  • inflate
  • limit 控制请求体的大小,默认为 100kb
  • reviver
  • type
  • verify

3、bodyParser.urlencoded

返回仅解析 urlencoded 的中间件,只支持 utf-8格式的请求体,支持GZIP的自动解码编码 该中间件将解析到的数据信息以body对象的形式插入到回调函数的request对象中,即 req.body。该请求体对象将以键值对的形式展示,如果 extended 被设置为true,其值可以为任意类型

  • extended
  • inflate
  • limit 控制请求体的大小,默认为 100kb
  • parameterLimit
  • type
  • verify

     var express = require('express')
     var bodyParser = require('body-parser')
     var app = express()
    	
     // create application/json parser
     var jsonParser = bodyParser.json()
    	
     // create application/x-www-form-urlencoded parser
     var urlencodedParser = bodyParser.urlencoded({ extended: false })
    	
     // POST /login gets urlencoded bodies
     app.post('/login', urlencodedParser, function (req, res) {
         if (!req.body) return res.sendStatus(400)
           res.send('welcome, ' + req.body.username)
     })
     // POST /api/users gets JSON bodies
     app.post('/api/users', jsonParser, function (req, res) {
       if (!req.body) return res.sendStatus(400)
       // create user in req.body
     })
    

####compress

compress通过gzip / deflate压缩响应数据。 这个中间件应该放置在所有的中间件最前面以保证所有的返回都是被压缩的。

####cookieParser

解析请求头里的Cookie, 并用cookie名字的键值对形式放在 req.cookies 你也可以通过传递一个secret 字符串激活签名了的cookie

####cookieSession

提供一个以cookie为基础的sessions, 设置在req.session里。 这个中间件有以下几个选项:

  • key cookie 的名字,默认是 connect.sess
  • secret prevents cookie tampering
  • cookie session cookie 设置, 默认是 { path: ‘/’, httpOnly: true, maxAge: null }
  • proxy 当设置安全cookies时信任反向代理 (通过 “x-forwarded-proto”)

####csrf

CSRF 防护中间件

默认情况下这个中间件会产生一个名为”_csrf”的标志,这个标志应该添加到那些需要服务器更改的请求里,可以放在一个表单的隐藏域,请求参数等。这个标志可以通过 req.csrfToken()方法进行校验。

bodyParser() 中间件产生的 req.body , query()产生的req.query,请求头里的”X-CSRF-Token”是默认的 value 函数检查的项

这个中间件需要session支持,因此它的代码应该放在session()之后。

####directory

文件夹服务中间件,用 path 提供服务。

这个中间件接收如下参数:

  • hidden 显示隐藏文件,默认为false.
  • icons 显示图标,默认为false.
  • filter 在文件上应用这个过滤函数。默认为false.