理解express中间件bodyparser
来源:互联网 发布:windows预览体验注册 编辑:程序博客网 时间:2024/05/21 06:51
在学习express+mysql过程中,用到了post请求。在请求体中找不到data过来的数据,翻阅资料,需要使用bodyparser中间件。果然使用过后请求体中出现了数据。但是对于以前没有接触过后端的我,并不懂其中的道理。
首先,bodyparser的作用是,解析http请求体。解析成功后覆盖原来的req.body,如果解析失败则为 {} 。
express在3.0版本中自带有很多中间件,但是在express 4.0以后,就将除static(静态文件处理)以外的其他中间件分离出来了;在4.0以后需要使用中间件时,就需要单独安装好相应的中间件以后调用。
官方API:https://www.npmjs.com/package/body-parser;
bodyParser.json是用来解析json数据格式的。bodyParser.urlencoded则是用来解析我们通常的form表单提交的数据,也就是请求头中包含这样的信息: Content-Type: application/x-www-form-urlencoded。
除了以上两种方法还有bodyparser.text,bodyparser.raw。
常见的四种Content-Type类型:
application/x-www-form-urlencoded 常见的form提交
multipart/form-data 文件提交
application/json 提交json格式的数据
text/xml 提交xml格式的数据
jquery默认的 content-Type 配置的是 application/x-www-form-urlencoded
bodyParser.urlencoded里面有一个extended扩展属性。
extended选项允许配置使用querystring(false)或qs(true)来解析数据,默认值是true,但使用默认值已被弃用。
querystring
querystring从字面上的意思就是查询字符串,一般是对http请求所带的数据进行解析。
这4个方法分别是querystring.parse和querystring.stringify,querystring.escape和querystring.unescape。
1 querystring.parse(str,separator,eq,options)
parse这个方法是将一个字符串反序列化为一个对象。
参数:str指需要反序列化的字符串;
separator(可省)指用于分割str这个字符串的字符或字符串,默认值为”&”;
eq(可省)指用于划分键和值的字符或字符串,默认值为”=”;
options(可省)该参数是一个对象,里面可设置maxKeys和decodeURIComponent这两个属性:
maxKeys:传入一个number类型,指定解析键值对的最大值,默认值为1000,如果设置为0时,则取消解析的数量限制;
decodeURIComponent:传入一个function,用于对含有%的字符串进行解码,默认值为querystring.unescape。在官方API的例子中,使用gbkDecodeURIComponent这个方法会报错,显示gbkDecodeURIComponent is no defined,这是因为在使用这个gbkDecodeURIComponent这个方法之前需要先进行定义。在API中也写了Assuming gbkDecodeURIComponent function already exists…这句话的意思是”假设这个gbkDecodeURIComponent方法已经存在”。
在使用前首先需要先引入模块;
const querystring=require('querystring');
const str='name=20&age=20&age=30';const str2=querystring.parse(str); //{ name: '20', age: [ '20', '30' ] }const str3='name=50#age=30#age=40';const str4=querystring.parse(str3,'#',null,{maxKeys:2});//{ name: '50', age: '30' }
2 querystring.stringify(obj,separator,eq,options)
stringify这个方法是将一个对象序列化成一个字符串,与querystring.parse相对。
参数:obj指需要序列化的对象
separator(可省)用于连接键值对的字符或字符串,默认值为”&”;
eq(可省)用于连接键和值的字符或字符串,默认值为”=”;
options(可省)传入一个对象,该对象可设置encodeURIComponent这个属性:
encodeURIComponent:值的类型为function,可以将一个不安全的url字符串转换成百分比的形式,默认值为querystring.escape()。
const str5={name:'zz',age:20};const str6=querystring.stringify(str5);//name=zz&age=20const str7={name:'zz',age:[20,30]}const str8=querystring.stringify(str7,'#',':');//name:zz#age:20#age:30
3 querystring.escape(str)
escape可使传入的字符串进行编码
const str9=querystring.escape(name='张三'); //name%3D%E5%BC%A0%E4%B8%89
4 querystring.unescape(str)
unescape将传入的%编码的字符串进行解码
const str10=querystring.unescape('name%3D%E5%BC%A0%E4%B8%89');//name=张三
- 理解express中间件bodyparser
- express中间件--bodyparser
- EXPRESS bodyParser
- bodyParser中间件的研究
- 深入理解express的中间件
- express.bodyParser文件路径设置
- nodesj中 中间件express-session的理解
- 使用connect的bodyParser中间件上传文件
- connect的bodyParser中间件处理文件上传
- express 中间件
- express 中间件
- 关于express项目中中间件的自我理解
- Node利用connect中间件 及bodyParser处理文件上传
- nodejs 使用app.use(express.bodyParser()); 出行异常----解决方法
- Most middleware (like bodyParser) is no longer bundled with Express
- Nodejs express之中间件
- Express validate 中间件
- Express中间件-01: 入门
- lua5.1中实现__gc
- 有奖征文:Bluemix云上实践征集喽~
- QT容器类(二) 之 Iterator
- Css 元素之间的模式转换
- http://click.aliyun.com/m/20667/
- 理解express中间件bodyparser
- 滤波器代码生成网站
- SVN 64位 中文汉化版本 1.9.5.27581
- 分布式数据访问服务之1
- unable to find method org.gradle.api.tasks.TaskInputs.file
- WEB服务器如何选择 Apache or Nginx?
- linux mysql出现乱码问题
- TP5与TP3.X版本的对比
- 自问自答1——为什么深度学习不采用牛顿法及其衍生算法作为优化算法?