从Busboy获取表单数组数据

时间:2015-10-20 19:22:12

标签: arrays node.js forms busboy

如何使用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]")

2 个答案:

答案 0 :(得分:0)

问题相当陈旧,但万一其他人偶然发现了这个问题,这就是我所做的:

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);
});

答案 1 :(得分:0)

问题是否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;
    }
});

希望可以节省别人几个小时的调试时间...