body-parser解析POST请求体

2017-11-03  本文已影响394人  后尘L

POST请求的请求体,包含多种类型,需要解析之后,才能使用。express提供了中间件body-parser用于解析POST请求的请求体,其它用于解析请求体的模块有bodyco-body

POST请求,请求体(body)的内容,常见的类型有json、表单、字符串、二进制数据、文件。 分别对应请求头中的请求体类型(Content-Type)为:application/jsonapplication/x-www-form-urlencodedtext/plainapplication/octet-streammultipart/form-databody-parser为前4种请求体准备了解析模块,分别为json()urlencoded()text()raw()。 请求体为文件的,body-parser没有做处理,如果要解析这种请求体,使用以下模块:busboy and connect-busboymultiparty and connect-multipartyformidablemulter

POST请求的请求体类型及编码,在请求头的Content-Type中指定。

请求体(body)、请求头中的请求体类型(Content-Type)、解析模块、解析模块中的type都对应时,body-parser也能解析成功。

安装body-parser

$ npm install body-parser [-g]

基本使用

准备工作

const express = require('express');
const app = express();
const bodyParser = require('body-parser');

// create application/json parser
const jsonParser = bodyParser.json();

// create application/x-www-form-urlencoded parser
const urlencodedParser = bodyParser.urlencoded({ extended: false });

// create text/plain parser
const textParser = bodyParser.text();

// create application/octet-stream
const rawParser = bodyParser.raw();

统一指定解析方式

第一种使用方法,是为所有请求统一指定解析方式,不推荐这种方式。

app.use(jsonParser);
app.use(urlencodedParser);

逐个指定解析方式

另一种方法,是为每个POST请求,分别指定解析方式,推荐这种方式。

app.post('url', xxxParser, (req, res) => {});

使用数据

解析成功后,就可以使用req.bodyreq.on('data', (chunk) => {}).on('end', () => {});来获取、使用body中的数据。

POST报文

POST /test HTTP/1.1
Host: 127.0.0.1:3000
Content-Type: text/plain; charset=utf8
Content-Encoding: gzip

chyingp

Content-Type: 请求报文主体的类型、编码。常见的类型有:text/plainapplication/jsonapplication/x-www-form-urlencodedmultipart/form-data。常见的编码有utf-8gbk
Content-Encoding: 声明报文主体的压缩格式,常见有gzipdeflateidentity
报文主体chyingp

options

body-parser提供的4种解析方法,都有options参数,具体含义参考官方文档

上一篇 下一篇

猜你喜欢

热点阅读