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

如何让Multer将FormData中的字符串数组解析为数组而非逗号分隔的字符串?

如何让Multer将FormData中的字符串数组解析为数组而非逗号分隔的字符串?

嗨,我完全懂你现在的困扰——Multer把FormData里的字符串数组转成了逗号分隔的单字符串,直接用split处理总觉得不够优雅,好像有点辜负Multer帮你解析其他数据的贴心对吧?别担心,有几个更贴合FormData原生逻辑的办法可以解决这个问题:

方案一:前端多次append同一个字段名(最推荐)

FormData本身支持对同一个key执行多次append操作,只要你这么做,Multer在解析时就会自动把这些同key的值拼成一个数组,而不是转成逗号分隔的字符串。你可以修改前端的代码,在处理数组类型的字段时,遍历数组元素逐个添加:

newProduct: {categories: string[]}

const formData = new FormData()

for (let key of Object.keys(newProduct)) {
  const value = newProduct[key];
  // 识别数组类型的字段
  if (Array.isArray(value)) {
    // 遍历数组,给同一个key逐个添加元素
    value.forEach(item => {
      formData.append(key, item);
    });
  } else {
    formData.append(key, value);
  }
}

const response = await axios.post('/api/products', formData)

这样后端通过req.body.categories拿到的就是['cat1', 'cat2', 'cat3']这样的标准数组了,完全符合你的预期。

方案二:后端解析JSON字符串(备选方案)

如果你之前尝试过用JSON.stringify(categories)把数组转成字符串再append,其实后端也能很优雅地处理,没必要觉得“别扭”——只要在后端拿到这个字符串后用JSON.parse()转成数组就行,比如:

// 后端Express示例代码
app.post('/api/products', upload.none(), (req, res) => {
  // 解析JSON字符串为数组
  const categories = JSON.parse(req.body.categories);
  // 这里的categories就是你要的数组格式了
  // 后续业务逻辑...
});

不过这个方法需要前后端提前约定好该字段是JSON格式的字符串,对比方案一,还是更推荐用多次append的方式,毕竟这才是FormData传递数组的原生正确姿势。

另外要提一句:你之前直接把整个数组传给formData.append时,浏览器会自动把数组转成逗号分隔的字符串,这是FormData的默认行为,不是Multer的问题哦~只要前端按照正确的方式传递数组,Multer就能完美解析成数组啦。

备注:内容来源于stack exchange,提问作者Lewis Burgess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:49:38