Postman请求创建MongoDB酒店数据报500验证错误求助
问题说明
通过Postman向localhost:8000/api/hotel发送POST请求创建酒店数据时,收到500内部服务器错误响应,错误核心为Mongoose文档校验失败,提示所有标记为必填的字段均未传值,后端服务本身启动、数据库连接均正常。
返回的核心错误信息:
{ "_message": "Hotel validation failed", "name": "ValidationError", "message": "Hotel validation failed: cheapestPrice: Path `cheapestPrice` is required., desc: Path `desc` is required., title: Path `title` is required., distance: Path `distance` is required., address: Path `address` is required., city: Path `city` is required., type: Path `type` is required., name: Path `name` is required." }
根因分析
报错的直接原因是Mongoose初始化Hotel文档时,req.body中没有携带任何必填字段值,请求体未被正确解析。结合代码排查,后端JSON解析中间件配置顺序正确,问题出在Postman请求配置错误:
发送请求时未将请求体格式设置为JSON类型,请求头缺少Content-Type: application/json,导致express.json()中间件无法解析传入的请求内容,req.body最终为空对象,触发全字段必填校验失败。
现存代码隐患
以下问题不会触发本次报错,但会导致后续功能异常,建议一并修复:
- Hotel模型中
featured字段默认值配置拼写错误,写为deafult:false,正确写法为default:false,否则默认值配置不生效 - 入口文件
index.js末尾多了一个冗余的右大括号},存在语法风险 - 路由错误处理逻辑不合理:参数校验错误属于客户端请求问题,应返回400状态码,当前统一返回500状态码不符合接口规范
修复方案
- 调整Postman请求配置:
- 打开请求编辑页的Body标签
- 选择
raw类型,右侧下拉框选中JSON(选中后Postman会自动在请求头添加正确的Content-Type字段) - 填入符合字段要求的请求体,参考示例:
{ "name": "城景商务酒店", "type": "商务型", "city": "上海", "address": "浦东新区陆家嘴环路1000号", "distance": "距地铁2号线陆家嘴站300米", "title": "陆家嘴核心区江景酒店", "desc": "酒店提供24小时前台、免费洗衣服务、高空观景餐厅", "cheapestPrice": 459, "featured": true } - 修复代码问题:
- 修正Hotel.js中
featured字段的default拼写错误 - 删除index.js末尾多余的右大括号
- 修正Hotel.js中
- 重启后端服务,重新发送请求即可正常创建酒店数据。
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

