express4之前,bodyparser是express下的一个对象。

express4把bodyparser分离出来。

本文中的实例基于以下的这个请求

$.ajax({
url: '/save',
type: 'post',
data: {
info: {
nane: 'henry',
age: 30
},
hobby: ['sport', 'coding']
}
});

一般来说express在接收到这个请求时,收到的请求参数是这样的

app.post('/save', function(req, res, next){
console.log(req.body);
/* {'info[name]': 'henry', 'info[age]': '30', hobby[1]: 'sport', 'hobby[2]': 'coding'} */
});

显然,这样的数据是不能直接使用的。

再看看使用bodyparser后的情况

app.use(bodyparser.urlencode());
app.post('/save', function(req, res, next){
console.log(req.body);
/* {'info': {'name': 'henry', 'age': '30'}, 'hobby': ['sport', 'coding']} */
});

bodyparser会将解析后的请求参数覆盖到req.body, 后面的中间件可以继续访问该属性。


常见的http请求的Content - type有以下几种

  • application/x-www-form-urlencoded 常见的form提交
  • multipart/form-data 文件提交
  • application/json 提交json格式的数据
  • text/xml 提交xml格式的数据
  • text/plain 提交纯文本

其中bodyparser.urlencode中间件用于解析application/x-www-form-urlencoded的请求参数

bodyparser.json中间件用于解析application/json的请求参数

另外,urlencode中间件有一个可配置的参数({extended: boolean});

这个参数为真时,中间件将使用qs模块解析请求参数,为假时使用nodejs自带的querystring来解析请求参数。

默认值是true。但是这个已经不被express官方推荐了。

来看看两者的区别

app.use(bodyparser.urlencode({extend: true}));
/* 这也是默认配置 */
app.post('/save', function(req, res, next){
console.log(req.body);
/* {'info': {'name': 'henry', 'age: '30'}, 'hobby': ['sport', 'coding']} */
});

另一种情况,使用querystring解析

app.use(bodyparser.urlencode({extended: false}));
app.post('/save', function(req, res, next){
console.log(req.body);
/* {'info[name]': 'henry', 'info[age]': '30', 'hobby[1]': 'sport', hobby[2]: 'coding'} */
});

可以看出来querystring没有很好的解析嵌套对象。所以,用qs来解析是比较合适。

但是qs自身也有涉及一些性能问题,导致解析对象的嵌套层数超过5层以后就不继续解析了。

一般来说,jq的ajax方法默认配置和form表单提交所使用的Content - type

都是application/x-www-form-urlencoded,并且提交的数据也不会有很深的嵌套,

使用qs来解析就足够了。但是如果非要上传复杂嵌套的数据,可以通过修改http请求的

Content-type 为 application/json即可。

middleware - bodyparser的更多相关文章

  1. paypal之nodejs 框架 Kraken-js 源码分析

    本文是基于 kraken-js 0.6.1 版本的 关于如何使用kraken-js 可以去看看官网的使用文档 点击这里 .kraken-js 是基于express之上的,目的在于让工程师更多的去关注代 ...

  2. 转: Nodejs 发送HTTP POST请求实例

    项目里面需要用到使用NodeJs来转发HTTP POST请求,把过程记录一下: exports.sendEmail = function (req, res) { res.send(200, req. ...

  3. nodejs的POST请求

    http://blog.csdn.net/puncha/article/details/9015317 Nodejs 发送HTTP POST请求实例 2013-06-03 17:55 71745人阅读 ...

  4. node.js 中间件

    node.js 中间件 node.js middleware Express middleware body-parser cookie-parser cookie-session cors csur ...

  5. Error: Most middleware (like bodyParser) ...

    运行NodeJS时出现如下错误: Error: Most middleware (like bodyParser) is no longer bundled with Express and must ...

  6. Connect is a middleware layer for Node.js

     Connect is a middleware layer for Node.js   http://senchalabs.github.com/connect Connect Connect is ...

  7. [Express] Level 4: Body-parser -- Post

    Parser Setup Assume the body-parser middleware is installed. Now, let's use it in our Express applic ...

  8. Express 学习笔记纯干货(Routing、Middleware、托管静态文件、view engine 等等)

    原始文章链接:http://www.lovebxm.com/2017/07/14/express-primer/ 1. Express 简介 Express 是基于 Node.js 平台,快速.开放. ...

  9. node express+mysql搭建简易API服务—body-parser中间件

    最近用express搭建了一个简单的RESTful风格的API服务,数据库使用mysql,主要用于获取数据库数据,模糊搜索等. 需要用到的模块: express:这个都很熟悉了: body-parse ...

随机推荐

  1. CC1310之使用SMARTRF STUDIO

    SMARTRF STUDIO是TI提供的射频测试软件,在调射频的时候非常非常非常好用,推荐每一个使用TI射频芯片的工程师都要掌握. 1 如何使用? 要使用SMARTRF STUDIO,硬件必须连接仿真 ...

  2. @ViewDebug.ExportedProperty的使用

    原文链接:http://daemon369.github.io/android/2014/06/12/android-viewdebug-exportedproperty/ http://www.eo ...

  3. 利用SlidingPaneLayout实现侧滑

    利用SlidingPaneLayout实验仿QQ侧滑效果 1.效果图            2.布局文件 <?xml version="1.0" encoding=" ...

  4. 总结--解决 mysql 中文乱码

    首先分析一下导致mysql 中文乱码的原因: 1.建表时使用了latin 编码 2.连接数据库的编码没有指定 3.写入时就已经乱码(这种情况需要自己检查源数据了) 解决方法总结: 1.创建库时指定编码 ...

  5. UISegmentedControl 控件

    一.创建 UISegmentedControl* mySegmentedControl = [[UISegmentedControl alloc]initWithItems:nil]; 是不是很奇怪没 ...

  6. Nginx密码验证 ngx_http_auth_basic_module模块

    有时候我们需要限制某些目录只允许指定的用户才可以访问,我们可以给指定的目录添加一个用户限制. nginx给我们提供了ngx_http_auth_basic_module模块来实现这个功能. 模块ngx ...

  7. shell常用命令

    wget wget -P /root url -O rename 实现文件下载指定目录和重命名

  8. C# ToString("x2")的理解

    1).转化为16进制. 2).大写X:ToString("X2")即转化为大写的16进制. 3).小写x:ToString("x2")即转化为小写的16进制. ...

  9. Bootstrap 模态框 + iframe > 打开子页面 > 数据传输/关闭模态框

    父页面bootstrap模态框: <div class="modal fade" id="myModal" tabindex="-1" ...

  10. EXCEL文件格式不匹配,或者已经损坏,除非信任来源

    修改注册表解决: .打开注册表编辑器 方法:开始 -> 运行 -> 输入regedit -> 确定 .找到注册表子项 HKEY_CURRENT_USER\Software\Micro ...