Multipart/form-data with arrays



我有一个简单的表单:

<form method="post" action="/test">
  <input type="hidden" name="arr[]" value="val1">
  <input type="hidden" name="arr[]" value="val2">
  <input type="hidden" name="arr[]" value="val3">
  <input type="submit" value="Submit">
</form>

带控制器:

//...
server.post('/test', function(req, res) {
    res.json(req.body);
});
//...

返回fine with:

{
  arr: [
    "val1",
    "val2",
    "val3"
  ]
}
但是,当我将enctype更改为multipart/formdata 时
<form method="post" action="/test" enctype="multipart/form-data">
  <input type="hidden" name="arr[]" value="val1">
  <input type="hidden" name="arr[]" value="val2">
  <input type="hidden" name="arr[]" value="val3">
  <input type="submit" value="Submit">
</form>

服务器现在响应:

{
  arr[]: "val3"
}

有什么问题吗?我需要什么配置吗?

如果你想知道,我也在发送一个文件,为什么我需要multipart/form-data

这可能与body-parser(特别是urlencoded方法)的使用有关,默认情况下,该方法只处理媒体类型为application/x-www-form-urlencoded的请求。

您的主应用程序模块可能有一些像这样的行:

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded());

我想,您可以添加以下内容来解析multipart/form-data类型的请求:

app.use(bodyParser.urlencoded({
  type: 'multipart/form-data'
}));

最新更新