bodyparse

body-parser介绍


body-parser

body-parser中间件

body-parser 中间件是用来解析HTTP请求体的,是express默认使用的中间件之一
使用express应用生成器生成一个网站,它默认已经使用了bodyParser.jsonbodyParser.urlencoded 的解析功能,除此之外,bodyParser还支持对text和raw的解析
使用中间件,就使用express下面的use方法

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

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

常见的四种content-Type类型:

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

关于urlencoded

bodyParser.urlencoded模块用于解析req.body的数据,解析成功后覆盖原来的req.body如果解析失败为{},该模块有一个属性extended,一下解析来自官方

The extended option allows to choose between parsing the URL-encoded data with the querystring library (when false) or the qs library (when true). Defaults to true, but using the default has been deprecated.

我的理解是,此属性选项允许配置使用querystring(false)或者是qs(true)来解析数据默认是true,但是已经不赞成使用,querystring是nodejs内建的对象之一,用来字符串化一个对象或解析字符串

querystring.parse("name=henry&age=30") => { name: 'henry', age: '30' }

关于qs

qs是querystring的库,在qs的功能基础上,还支持更多的功能,并且优化了一些安全性
对象解析的支持:

// 内建对象 querystring
querystring.parse("info[name]=henry&info[age]=30&hobby[1]=sport&hobby[2]=coding") => 
  { 
    'info[name]': 'henry',
    'info[age]': '30',
    'hobby[1]': 'sport',
    'hobby[2]': 'coding'
  }

// 第三方插件 qs
qs.parse("info[name]=henry&info[age]=30&hobby[1]=sport&hobby[2]=coding") => 
  {
    info: {
      name: 'henry',
      age: '30'
    },
    hobby: [ 'sport', 'coding' ]
  }

可以看到当使用qs解析的时候,会将info对象(多级嵌套)进行识别并以对象的形式表达出来,但是querystring则没有这个功能
值得注意的是:对于多级嵌套的对象,qs只会解析5层嵌套,超出的部分会表现的跟文本头部的那种情况一样,并且qs最多只会解析20个索引,超出的部分将会以键值对的形式解析




更多详细的资料可以查阅:
      body-parser    qs
本文出处: xxKarina