1

如何使用busboy获取数组表单数据?

在路线:

req.busboy.on('field', function(fieldname, val){
  //fieldname is string, expecting array
  //'bunnies[gray]', etc...
});

而我的观点:

form(method="post" action="/post/path" enctype="multipart/form-data")
    input(name="bunnies[gray]")
    input(name="bunnies[white]")
    input(name="bunnies[black]")
    input(name="bunnies[brown]")
    input(name="bunnies[purple]")
4

3 回答 3

0

所以busboy这并不愚蠢——multipart/form-data默认情况下并不像JSONbody 那样支持数组。

带有 as 字段名称的请求arrayName[n]不会被busboy单独解析为数组——这样的有效负载仍然必须手动解析。

可以使用这些其他答案之一手动解析这些数组值...

...但是如果不希望手动解析数组,则可以考虑使用co-busboy而不是使用此选项:

autoFields: true
于 2021-08-24T18:13:48.063 回答
-1

询问是否 5 岁,但它给了我一个提示。我来自 PHP 背景,并没有意识到 Busboy 这么愚蠢,所以如果你想处理字段数组,你需要像这样实际处理它们:

busboy.on('field', (fieldname, val) => {
    if (fieldname.indexOf('[]') !== -1) {
        let fn = fieldname.replace('[]', '');
        if (typeof req.body[fn] === 'undefined') {
            req.body[fn] = [];
        }
        req.body[fn].push(val);
    } else {
        req.body[fieldname] = val;
    }
});

希望能节省别人几个小时的调试时间……

于 2020-03-23T11:54:10.640 回答
-1

这个问题相当古老,但如果其他人偶然发现这个问题,这就是我所做的:

var arr = new Array();

req.pipe(req.busboy);

req.busboy.on('field', function(key, value) {
  if(key === 'array_name[]') {
    arr.push(value);
  }
});

req.busboy.on('finish', function() {
  console.log(arr);
});
于 2016-03-22T15:07:45.160 回答