bodyParser中间件用来解析http请求体,是express默认使用的中间件之一。

1.这个模块提供以下解析器

  (1) JSON body parser (2) Raw body parser (3)Text body parser (4)URL-encoded form body parser

2.如何安装

  npm install body-parser

3.API

  var bodyParser = require('body-parser');

  可以通过body-parser对象创建中间件,当接受到客户端请求时所有的中间件都会给req.body添加属性,请求内容为空时,解析为空或者错误。

  (1)bodyParser.json(options)

    处理json数据

    app.use(bodyParser.json());

  (2)bodyParser.raw(options)

    处理Buffer数据流

  (3)bodyParser.text(options)

    处理文本数据

  (4)bodyParser.urlencoded(options)

    处理UTF-8的编码的数据

    app.use(bodyParser.urlencoded({extented:false}))    

    extend

    ture->使用queryString库(默认) false->使用qs库。

使用express应用生成器生成一个网站,它默认已经使用了 bodyParser.json 与 bodyParser.urlencoded 的解析功能,除了这两个,bodyParser还支持对text、raw的解析。

顾名思义,bodyParser.json是用来解析json数据格式的。bodyParser.urlencoded则是用来解析我们通常的form表单提交的数据,也就是请求头中包含这样的信息: Content-Type: application/x-www-form-urlencoded

bodyParser.urlencoded 模块用于解析req.body的数据,解析成功后覆盖原来的req.body,如果解析失败则为 {}

常见的四种Content-Type类型:

  • application/x-www-form-urlencoded 常见的form提交
  1. var bodyParser = require('body-parser');
  2. app.use(bodyParser.urlencoded({ extended: false }));
  3. app.post('/api/user/insert', function (req, res) {
  4. console.log(req.body);
  5. })

  

  • multipart/form-data 文件提交
  1. var multipart = require('connect-multiparty');
  2. var multipartMiddleware = multipart();
  3. app.post('/formdata',multipartMiddleware, function (req, res) {
  4. console.log(req.body);
  5. res.send("post successfully!");
  6. });

  

  • application/json 提交json格式的数据
  1. var bodyParser = require('body-parser');
  2. app.use(bodyParser.json());
  3. app.post('/api/user/insert', function (req, res) {
  4. console.log(req.body);
  5. })

  

  • text/xml 提交xml格式的数据

body-parser默认不支持这种数据格式

  • 解决方法:把请求体参数按照字符串读取出来,然后使用 xml2json 包把字符串解析成json对象,然后对json对象进行操作,方便得多。
  • 注意:我们还是要使用 body-parse 得到字符串,然后再转化.

    利用req上定义的事件 data 来获取http请求流, end 事件结束请求流的处理.

    利用 xml2json 把上面得到的请求参数流(我们直接转化为字符串)转化为 json 对象.

    demo如下:

  1. var express = require('express');
  2. var bodyParser = require('body-parser');
  3. var xml2json=require('xml2json');
  4. var app = express();
  5. app.use(bodyParser.urlencoded({
  6. extended: true
  7. }));
  8. app.post('/xml', function (req, res) {
  9. req.rawBody = '';//添加接收变量
  10. var json={};
  11. req.setEncoding('utf8');
  12. req.on('data', function(chunk) {
  13. req.rawBody += chunk;
  14. });
  15. req.on('end', function() {
  16. json=xml2json.toJson(req.rawBody);
  17. res.send(JSON.stringify(json));
  18. });
  19. });

  

更改之后就可以收到axiso传来的数据了,将来如果正式环境用到可以统一协商一下,使用application/x-www-form-urlencoded还是json,然后前后端统一更改就可以了。

Express bodyParser中间件使用方式的更多相关文章

  1. express之中间件bodyParser的理解

    bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理.另外bodyParse也可以接受客户端ajax提交的json数据,以及url的 ...

  2. express,中间件(body-parser),req.body获取不到参数(含postman发请求的方法)

    问题描述: 最近在做毕设,express 里边的中间件(body-parser)失效,req.body获取不到任何值,req.query能获取到值.一开始加body-parser中间件是有用的,直到昨 ...

  3. express第三方中间件研究之bodyParser中间件

    转载至:http://www.cnblogs.com/lianer/p/5178693.html 接触nodejs已有一段时间了,但最近才开始落实项目,于是使用express应用生成器生成了一个应用. ...

  4. Express全系列教程之(五):Express的中间件

    一.中间件 从字面意思,我们可以了解到它大概就是做中间代理操作,事实也是如此:大多数情况下,中间件就是在做接收到请求和发送响应中间的一系列操作.事实上,express是一个路由和中间件的web框架,E ...

  5. bodyParser中间件的研究

    原文链接: bodyParser中间件 bodyParser中间件用来解析http请求体,是express默认使用的中间件之一. 使用express应用生成器生成一个网站,它默认已经使用了 bodyP ...

  6. 使用node.js的bodyParser中间件读取post数据解析

    昨天我们使用的网关转发数据时出了点问题! 情景是这样的,另一方以Post的形式向我的node.js服务推送JSON数据.但是使用bodyParser中间件后,在req.body中拿不到任何信息. 代码 ...

  7. nodejs使用multiparty模块实现文件上传(另附express.bodyParser()的说明)

    最近师弟师妹们在用formidable做文件上传的时候会出现form.parse()不会触发的问题,在stackoverflow也没有找到答案,反而是几个答案推荐使用multiparty来代替,因为那 ...

  8. node中express的中间件之methodOverride

    methodOverride中间件必须结合bodyParser中间件一起使用,为bodyParser中间件提供伪HTTP方法支持. index.html代码: <!DOCTYPE html> ...

  9. Express ( MiddleWare/中间件 路由 在 Express 中使用模板引擎 常用API

    A fast, un-opinionated, minimalist web framework for Node.js applications. In general, prefer simply ...

随机推荐

  1. Android8.0新特性总结

    1.通知渠道:开发者可以自定义应用的通知内容类别,为用户提供一个可以对通知精细控制的接口,用户可以对通知    进行精细的掌控 开发指南 创建通知渠道的步骤: 创建 NotificationChann ...

  2. ant-design-pro中引入bizcharts报错:BizCharts is not defined 解决

    解决方法: 在config.js 中的 externals 配置项中进行了如下配置修改: externals: { '@antv/data-set': 'DataSet', // bizcharts: ...

  3. [Navicat]把1个库的数据迁移到另1个库--数据库备份

    需求: 将autotest库中所包含的所有表,从连接centOS7复制1份至localhost.autotest 操作步骤: 1.将centOS7.autotest库中表结构及表数据转为sql语句:c ...

  4. CentOS 7系统配置上的变化

    http://www.linuxidc.com/Linux/2014-09/107375p4.htm CentOS 7系统配置上的变化解析 ip ss指令替代 ifconfig route arp n ...

  5. WampServer 下载以及安装问题 以及配置远程连接MYSQL

    WampServer 3.0 下载: http://dl.pconline.com.cn/download/52877-1.html 碰到的问题DDL无法添加,解决方法:MSVCR110.DLL fo ...

  6. WebApi实现通讯加密 (转)

    http://www.cnblogs.com/jonneydong/p/WebApi_Encryption.html 一. 场景介绍: 如题如何有效的,最少量的现有代码侵入从而实现客户端与服务器之间的 ...

  7. spark-on-yarn 学习

    1. hdfs存文件的时候会把文件切割成block,block分布在不同节点上,目前设置replicate=3,每个block会出现在3个节点上. 2. Spark以RDD概念为中心运行,RDD代表抽 ...

  8. DOTS概述

    Unity数据导向技术栈有三个主要部分:Unity实体 - 组件 - 系统(ECS),Unity C#作业系统和Unity Burst编译器. 实体 - 组件 - 系统概述 ECS提供了一种游戏设计方 ...

  9. 写linux脚本你怎么能不知道位置参数!?

    在写shell脚本的时候,我们经常会手动设置参数,然后对我们的输入的这些参数进行处理和分析,那么这个东东到底值怎么使用的呢? 1.$n $0代表命令本身,$1-9代表接受的第1-9个参数,10以上需要 ...

  10. mac 查看占用的端口并关闭进程

    -i 查看某个端口是否被占用,如 lsof -i:8081 显示占用情况 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 12188 a ...