是什么:
body-parser
是一个HTTP请求体解析中间件,使用这个模块可以解析JSON、Raw、文本、URL-encoded格式的请求体,Express
框架中就是使用这个模块做为请求体解析中间件。请求体解析后,解析值都会被放到req.body属性,内容为空时是一个{}空对象。
为什么要用它:
//截取了项目代码中用superagent发送请求的片段
request.post('/signUp')
.send({name: action.name, password: action.password})
现在在接收端我想要取到发送请求时的参数,即name和password,该怎么取,我先输出一下req,看看都有什么
这只是冰山一角,输出的req非常复杂,完全找不到我发送的参数在哪里,这个时候就需要对req进行解析了,当然可能有多种方式,在这里我们就说一下Express中常用的body-parser
如何用:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
上面的代码我们引进了bodyparser
,。最后两行模块会处理application/x-www-form-urlencoded
、application/json
两种内容格式的请求体。现在我又输出了一下req,内容还是非常多,不过我发现它将我需要的参数都放到了一个名为body的对象中
图中的name和password就是我在发送请求时发送的参数,这样一来我就可以用
req.body.name
和req.body.password
取到我想要的数据了.
上边的两行代码到底是什么意思,又做了什么呢,
1. bodyParser.json(options)
解析json格式
返回一个仅解析json格式数据的中间件。这个方法支持任意Unicode编码的请求体,且支持gzip和deflate编码的数据压缩.
2.bodyParser.urlencoded(options)
解析文本格式
返回一个处理urlencoded数据的中间件。这个方法默认使用UTF-8编码,且支持gzip和deflate编码的数据压缩。解析后,其后的所有的req.body中将会是一个键值对对象。
除了我们上边说得两种格式的解析,还有其他的
bodyParser.raw(options):解析二进制:
返回一个将所有数据做为Buffer
格式处理的中间件。这个方法支持gzip和deflate编码的数据压缩。解析后,其后的所有的req.body中将会是一个Buffer
数据。
bodyParser.text(options):解析文本格式
返回一个仅处理字符串格式处理的中间件。这个方法支持gzip和deflate编码的数据压缩。解析后,其后的所有的req.body中将会是一个字符串值