Express处理HTTP POST方法body数据

参考:Get HTTP POST Body in Express.js

 

以POST方法传输到express服务器的http Content-Type一般为4种:

  1. application/x-www-form-urlencoded:以这种类型编码的数据格式上很像url中的查询字符串,是&符号作分隔符的键值对,如foo=bar&abc=123&stack=abuse,这种是客户端未指定Content-Type时的默认类型。
  2. multipart/form-data:这种类型是用于上传文件的,依旧是如第1种的键值对字符串,但是数据更分散且包含更多元数据。
  3. text/plain:这种类型一般表示数据是未结构化的纯文本,一般不用。
  4. application/json:

body-parser库:

  1. urlencoded()方法:处理application/x-www-form-urlencoded类型
  2. json()方法:处理application/json类型
  3. raw()方法:将http body处理成Buffer类型,一般用于具体的自定义Content-Type,默认处理的Content-Type是application/octet-stream
  4. text()方法:处理text/plain类型数据

express提取POST数据:

首先需要引入body-parser库。

当请求方式为application/x-www-form-urlencoded时,在进入指定路由前先用body-parser的urlencoded方法作为中间件处理,然后在req.body得到对象类型数据,这里中间件的options指定了extended为true是为了告知body-parser使用qs库来处理数据,这样可以得到像对象或数组类型的数据,否则url字符串中的对象或数组类型是没办法解析的

app.use(bodyParser.urlencoded({ extended: true }));

当请求方式为multipart/form-data时,用专用的上传插件处理如formidable,multer等

当请求方式为text/plain时,在进入指定路由前先用body-parser的text方法作为中间件处理,然后在req.body得到对象类型数据

app.use(bodyParser.text());

当请求方式为application/json时,在进入指定路由前先用body-parser的json方法作为中间件处理,然后再req.body得到对象类型数据

app.use(bodyParser.json());

这些中间件最牛的是你不仅仅可以只用其中一种,你可以在进入指定路由前同时用多种中间件去处理数据,以确保你的程序可以适当地处理所有数据类型。

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser.raw());
app.use(bodyParser.text());

具体测试如下:

 

你可能感兴趣的:(Node.js)