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的更多相关文章
-
paypal之nodejs 框架 Kraken-js 源码分析
本文是基于 kraken-js 0.6.1 版本的 关于如何使用kraken-js 可以去看看官网的使用文档 点击这里 .kraken-js 是基于express之上的,目的在于让工程师更多的去关注代 ...
-
转: Nodejs 发送HTTP POST请求实例
项目里面需要用到使用NodeJs来转发HTTP POST请求,把过程记录一下: exports.sendEmail = function (req, res) { res.send(200, req. ...
-
nodejs的POST请求
http://blog.csdn.net/puncha/article/details/9015317 Nodejs 发送HTTP POST请求实例 2013-06-03 17:55 71745人阅读 ...
-
node.js 中间件
node.js 中间件 node.js middleware Express middleware body-parser cookie-parser cookie-session cors csur ...
-
Error: Most middleware (like bodyParser) ...
运行NodeJS时出现如下错误: Error: Most middleware (like bodyParser) is no longer bundled with Express and must ...
-
Connect is a middleware layer for Node.js
Connect is a middleware layer for Node.js http://senchalabs.github.com/connect Connect Connect is ...
-
[Express] Level 4: Body-parser -- Post
Parser Setup Assume the body-parser middleware is installed. Now, let's use it in our Express applic ...
-
Express 学习笔记纯干货(Routing、Middleware、托管静态文件、view engine 等等)
原始文章链接:http://www.lovebxm.com/2017/07/14/express-primer/ 1. Express 简介 Express 是基于 Node.js 平台,快速.开放. ...
-
node express+mysql搭建简易API服务—body-parser中间件
最近用express搭建了一个简单的RESTful风格的API服务,数据库使用mysql,主要用于获取数据库数据,模糊搜索等. 需要用到的模块: express:这个都很熟悉了: body-parse ...
随机推荐
-
postgresql查询的处理过程
本文简单描述了Postgresql服务器接收到查询后到返回给客户端结果之间一般操作顺序,总的流程图如下: 第一步: 客户端程序可以是任何符合 PostgreSQL 协议规范的程序,如 JDBC 驱动. ...
-
SQL Server 开发指南
SQL Server 数据库设计 一.数据库设计的必要性 二.什么是数据库设计 三.数据库设计的重要 四.数据模型 实体-关系(E-R)数据模型 ...
-
seleniumRC启动及浏览器实例配置
一.firefox浏览器实例配置 1.启动用户配置文件管理器 重要:在启动用户配置文件管理器之前,Firefox必须完全关闭. 1)按 support.cdn.mozilla.net/medi ...
-
IOS-UIProgressView的简单介绍
IOS-UIProgressView的简单介绍 转载:http://blog.sina.com.cn/s/blog_9c2363ad0101e1jy.html // UIProgressView的使用 ...
-
thinkphp实现自动登录
网页上经常有一些自动登录的checkbox,勾选后,下次进入该网站,无需登录,即可执行一些需要登录才能执行的操作.上班无事,用thinkphp做了下 1 下面是一个很普通的form表单,有一个chec ...
-
洛谷-笨小猴-NOIP2008提高组复赛
题目描述 Description 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设m ...
-
Eclipse默认编码设置
eclipse 默认编码居然是GBK,js文件默认编码是ISO-....怎么可以这样呢?都修改成UTF8的方法:1.windows->Preferences...打开"首选项" ...
-
android之间传递list
Intent intent = new Intent(getActivity(), Activity_Character.class); intent.putExtra("mlTrait&q ...
-
网站加速与Linux服务器防护
网站加速方面 1. Nginx 配置 gzip 压缩 开启nginx gzip压缩后,网页.css.js等静态资源的大小会大大的减少,从而可以节约大量的带宽,提高传输效率,给用户快的体验.虽然会消耗c ...
-
restful架构风格设计准则(六)版本管理
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! 版本管理 在前面已经提到过,一个REST系统为资源所抽象出的URI实际上 ...