表单提交带对象和不带对象的区别

325 阅读1分钟

如果表单数据中没有对象的话,返回给后台的数据结果如下

后台可以设置 app.use(bodyParser.urlencoded({ extended: false }))

如果表单数据中有对象的话,返回给后台的数据结果如下

后台可以设置 app.use(bodyParser.urlencoded({ extended: true }))

后台解析这两种数据格式的源码如下


function parser (name) {
  var mod = parsers[name]

  if (mod !== undefined) {
    return mod.parse
  }

  // this uses a switch for static require analysis
  switch (name) {
    case 'qs':
      mod = require('qs') // extend: true
      break
    case 'querystring': // extend: false
      mod = require('querystring')
      break
  }

  // store to prevent invoking require()
  parsers[name] = mod

  return mod.parse
}

如果表单数据不带对象格式的数据,使用 node 自带的 querystring 解析。

如果表单数据带对象格式的数据,使用第三方的 qs 解析,才可以保证解析成功,如下所示

var withEmptyString = qs.parse('a[]=&a[]=b');
assert.deepEqual(withEmptyString, { a: ['', 'b'] });
 
var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c');
assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] });

觉得对你有帮助,点个赞可好呀~~