React中传递对象ID数组至后端转为字符串的问题求助
解决FormData传递数组变为字符串的问题
问题根源在于:FormData直接append数组时会自动转为逗号分隔的字符串,且express.json()仅能解析application/json格式请求,无法处理multipart/form-data类型的FormData。以下是两种可行解决方案:
方案一:改用JSON格式发送请求
放弃FormData,直接以JSON格式传递数据,适配后端已配置的express.json()解析:
// 前端提交请求时的代码 fetch('/你的接口地址', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ package_ids }), });
后端直接通过req.body.package_ids即可获取到数组,无需额外处理。
方案二:继续使用FormData,调整传递与解析逻辑
前端调整:逐个添加数组元素
不要直接将整个数组append到FormData,改为循环添加每个ID:
const formData = new FormData(); // 用[]后缀标识数组,确保后端能识别为数组类型 package_ids.forEach(id => { formData.append('package_ids[]', id); });
后端调整:用multer解析FormData
- 先安装multer依赖:
npm install multer
- 配置并使用multer解析请求:
const multer = require('multer'); // 仅解析文本类型的FormData,不存储文件 const upload = multer(); // 在对应路由中使用upload.none()中间件 app.post('/你的接口地址', upload.none(), (req, res) => { // req.body.package_ids 直接就是数组格式 const packageIds = req.body.package_ids; // 后续写入数据库的逻辑 });
如果无法修改前端代码,后端也可以手动将逗号分隔的字符串拆分为数组(注意:若ID包含逗号会出错,仅作为临时方案):
const packageIds = req.body.package_ids.split(',').map(id => id.trim());
内容的提问来源于stack exchange,提问作者John Oliver
相关产品推荐
相关产品推荐

