【问题标题】:Parsing an array posted to nodejs server using querystring使用查询字符串解析发布到 nodejs 服务器的数组
【发布时间】:2014-11-15 22:28:32
【问题描述】:

我总是使用查询字符串来解析客户端发布的数据。但这是我第一次发布数组,我遇到了同样的问题。

客户端:

        $.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)

你可以看到我的数组变成了一个字符串,这是一个问题。

【问题讨论】:

  • body 是一个查询字符串!!

标签: javascript arrays node.js query-string


【解决方案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' ] }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多