繁体   English   中英

使用querystring解析发布到nodejs服务器的数组

[英]Parsing an array posted to nodejs server using querystring

我总是使用querystring来解析客户端发布的数据。 但这是我第一次发布数组,并且遇到了同样的问题。

客户端:

        $.ajax({
        url: 'myurl',
        type: "POST",
        data: {ids: ["str1","str2","str3"]},
        success: function (msg) {
            location.reload();
        },
        error: function (msg) {
            alert("ServerError");
        },
        cache: false,
        });

服务器端:

var body='';
   req.on('data', function(chunk) {
    body += chunk.toString();
   });

  req.on('end', function() {
    var parsedbody = querystring.parse(body);
    console.log(parsedbody);// {'ids[]':["str1","str2","str3"]}

我的问题? 好吧,首先请注意以下注释:关键是ids[]与简单ids 好奇怪又烦人。 最大的问题是: 如果我通过一个字符串传递这样的数组:

 data of ajax request--> data: { ids: ["str1"] }

console.log变成

console.log(parsedbody);// {'ids[]':"str1"}
console.log(parsedbody['ids[]'].length);// 4 (instead of 1)

如您所见,我的数组变成了字符串,这是一个问题。

您可以轻松地围绕querystring.parse()创建自己的包装器。 例:

var qs = require('querystring');

function parseQS(str) {
  var result = qs.parse(str),
      keys = Object.keys(result);

  for (var i = 0, len = keys.length, key, newKey; i < len; ++i) {
    key = keys[i];
    if (key.slice(-2) === '[]') {
      newKey = key.slice(0, -2);
      if (!Array.isArray(result[key]))
        result[newKey] = [ result[key] ];
      else
        result[newKey] = result[key];
      delete result[key];
    }
  }

  return result;
}

console.dir(parseQS('foo[]=bar&baz=bla&quux[]=123&quux[]=456'));
// outputs:
// { baz: 'bla',
//   foo: [ 'bar' ],
//   quux: [ '123', '456' ] }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM