You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios FormData传大字符串至Node.js时bodyparser截断问题排查

大体积FormData字段截断问题排查与解决

问题场景

浏览器端通过Axios结合FormData向Node.js服务器发送请求,元数据以JSON字符串形式放在FormData的普通字段中;服务器使用body-parser配合express-fileupload处理请求,其中body-parser的json和urlencoded均设置了100MB的大小限制;Nginx反向代理已设置client_max_body_size=500M。

当JSON字符串小于1MB时请求正常,超过1MB后服务器接收的元数据被截断,执行JSON.parse时抛出Unexpected end of JSON input错误。

客户端代码示例

let fd = new FormData()
fd.append('uid', 1);
fd.append('meta', "json string here");
axios({
  url: 'http://localhost:9090/receivemeta',
  method: 'POST',
  data: fd
}).then(resp => {
  console.log(resp.data);
}).catch(error => {
  console.error(error.response.data)
});

服务端代码示例

app.post('/receivemeta', async (req, res) => {
  try {
    let meta = JSON.parse(req.body.meta);
    fs.writeJSONSync('/tmp/meta.json', meta, 'utf-8');
    res.json({ success: true })
  } catch (error) {
    res.json({ success: false, error: error });
  }
})

问题根源

不是body-parser导致的问题。原因在于:

  • body-parser的json和urlencoded配置仅针对application/json、application/x-www-form-urlencoded类型的请求生效,对multipart/form-data类型的请求不处理;
  • 实际处理multipart/form-data的是express-fileupload,它默认对FormData中的**普通字段(非文件)**设置了fieldSize=1MB的限制,当字段内容超过这个值时会被自动截断,进而导致JSON解析失败。

解决方案

在初始化express-fileupload时,显式配置limits.fieldSize为更大的值(比如100MB),覆盖默认限制:

const fileUpload = require('express-fileupload');

// 配置express-fileupload,调整普通字段大小限制
app.use(fileUpload({
  limits: {
    fieldSize: 100 * 1024 * 1024 // 设置为100MB
  }
}));

// 原有路由逻辑保持不变
app.post('/receivemeta', async (req, res) => {
  try {
    let meta = JSON.parse(req.body.meta);
    fs.writeJSONSync('/tmp/meta.json', meta, 'utf-8');
    res.json({ success: true })
  } catch (error) {
    res.json({ success: false, error: error.message });
  }
})

额外注意事项

  • 确保express-fileupload的配置代码放在路由注册之前,保证中间件先生效;
  • 若后续涉及文件上传,可同时调整limits.fileSize参数控制文件大小。

内容的提问来源于stack exchange,提问作者Kaushal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:32:49