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

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状态码不符合接口规范
修复方案
  1. 调整Postman请求配置:
    • 打开请求编辑页的Body标签
    • 选择raw类型,右侧下拉框选中JSON(选中后Postman会自动在请求头添加正确的Content-Type字段)
    • 填入符合字段要求的请求体,参考示例:
    {
      "name": "城景商务酒店",
      "type": "商务型",
      "city": "上海",
      "address": "浦东新区陆家嘴环路1000号",
      "distance": "距地铁2号线陆家嘴站300米",
      "title": "陆家嘴核心区江景酒店",
      "desc": "酒店提供24小时前台、免费洗衣服务、高空观景餐厅",
      "cheapestPrice": 459,
      "featured": true
    }
    
  2. 修复代码问题:
    • 修正Hotel.js中featured字段的default拼写错误
    • 删除index.js末尾多余的右大括号
  3. 重启后端服务,重新发送请求即可正常创建酒店数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:27:15