Express创建Exercise接口form-data提交报name必填,JSON提交正常如何解决?
问题原因
Exercise validation failed: name: Path \name` is required. 报错的直接原因是接口没有获取到请求提交的name参数,导致Mongoose在校验数据时判断必填字段缺失。 你当前使用的Express框架默认仅内置了application/json和application/x-www-form-urlencoded格式的请求体解析能力,而form-data对应的请求头类型是multipart/form-data,Express原生不支持解析该格式的请求体,因此req.body为空,取不到name`字段值。
解决方案
使用专门处理multipart/form-data格式的中间件multer即可解决,操作步骤如下:
- 安装multer依赖
npm install multer
- 在服务入口文件(如app.js)或者对应路由文件中引入并配置multer:
// 引入multer const multer = require('multer'); // 仅解析表单文本字段的配置,不需要上传文件可以直接使用该配置 const upload = multer();
- 在对应POST路由上挂载multer中间件:
假设你原来的路由写法为:
app.post('/exercise', exerciseController.create);
修改为:
// upload.none()代表本次请求只包含文本字段,没有文件上传 app.post('/exercise', upload.none(), exerciseController.create);
修改完成后,服务就可以正常解析form-data格式提交的字段,req.body.name可以正常拿到对应值,即可兼容前端表单提交的需求。如果后续需要支持表单上传文件,只需要调整multer的配置,指定文件存储路径、大小限制等参数即可。
内容的提问来源于stack exchange,提问作者user17205196
相关产品推荐
相关产品推荐

