Express API 测试用例整理(四)
13 Nov 2015Express 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.