var bodyParser = require('body-parser')所有中间件都会把解析好的消息体封装到req.body上面,如果没有消息体解析那么返回的就是一个空对象{}。当然这个模块也可能抛出异常
type:如果传入string那么这个string被传入到type-is库,这个string扩展名可以是bin,或者mime类型是application/octet-stream,也可以是通配符(*/*,application/*)。除了默认的返回值为application/octet-stream以外和上面是一致的
verify:和上面一致
bodyParser.text(options)
返回一个中间件,这个中间件可以把消息体解析为一个字符串,而且支持自动的gzip和deflate编码。解析的结果在req.body中
options参数包含以下内容:
defaultCharset:设置一个默认的编码对文本内容进行编码,如果在content-type中没有指定就用这个默认的编码
inflate:和上面一致
limit:和上面一致
type:如果是一个string,那么被传入到type-is的库中,这个string可以是扩展名为txt,或者mime类型为text/plain,或者含有通配符的类型。
默认为text/plain
verify:和上面一致
bodyParser.urlencoded(options)
返回一个只解析urlencoded消息体的中间件,只接受utf-8对消息体进行编码,同时支持自动的gzip/deflate编码解析过的消息放在req.body对象中。这个对象包含的键值对,同时值可以是一个string或者一个数组(当extended为false的时候)。也可以是任何类型(当extended设置为true)
options参数包含以下内容:
extended:如果设置为false,那么对URL-encoded的数据的解析采用querystring库,如果设置为true那么采用qs库。 extended符号允许富对象和数组被编码为URL-encoded的类型,也可以是一个JSON编码的数据。默认为true但是还是要仔细研究一下qs和querystring的区别,以便正确的选择
inflate:和上面一致
limit:和上面一致
parameterLimit:指定在URL-encoded的数据中最大的参数的数量,如果参数多于这个数量那么返回给客户端a413,。默认值为1000
type:如果这个参数是string那么会传递给type-is库去判断,扩展名可以是urlencoded,或者mime类型为 application/x-www-form-urlencoded
或者mime类型为*/x-www-form-urlencoded。默认为application/x-www-form-urlencoded
verify:和上面一致
例子:
var express = require('express') var bodyParser = require('body-parser') var app = express() // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false }))//extended为false表示使用querystring来解析数据,这是URL-encoded解析器 // parse application/json app.use(bodyParser.json())//添加json解析器 app.use(function (req, res) { res.setHeader('Content-Type', 'text/plain') res.write('you posted:\n') res.end(JSON.stringify(req.body, null, 2)) })这个例子演示了添加一个原生的JSON和URL-encoded解析器去解析消息体。
var express = require('express') var bodyParser = require('body-parser') var app = express() // create application/json parser var jsonParser = bodyParser.json()//获取JSON解析器中间件 // create application/x-www-form-urlencoded parser var urlencodedParser = bodyParser.urlencoded({ extended: false })//url-encoded解析器 // POST /login gets urlencoded bodies app.post('/login', urlencodedParser, function (req, res) {//注册URL解析器 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) {//使用json中间件获取json数据 if (!req.body) return res.sendStatus(400) // create user in req.body })这个例子演示了如何在需要的路由中添加一个body-parser,这也是express最推荐的使用body-parser的方式
// parse various different custom JSON types as JSON app.use(bodyParser.json({ type: 'application/*+json' })) // parse some custom thing into a Buffer app.use(bodyParser.raw({ type: 'application/vnd.custom-type' })) // parse an HTML body into a string app.use(bodyParser.text({ type: 'text/html' }))所有的中间件可以指定对消息进行解析的编码方式
multipart/form-data的表单进行处理