Mongoose Schema校验异常求助:仅传部分必填项未触发校验
问题根源:Schema定义语法错误
你碰到的这个问题本质是Mongoose Schema的参数传递方式写错了,我来给你拆解清楚:
你现在的代码把每个字段都单独包装成对象传给mongoose.Schema()了:
mongoose.Schema( { companyName: { type: String, required: true } }, { companyEmail: { type: String, required: true } }, { companySite: { type: String, required: true } } )
但Mongoose的Schema构造函数只认两个核心参数:
- 第一个参数:包含所有字段定义的单一对象
- 第二个参数:Schema的配置选项(比如
timestamps、collection这类全局设置)
你后面的两个对象会被当成Schema的配置选项处理,根本不会被识别成字段定义——这就是为什么companyEmail和companySite标记了必填却不触发校验的原因。
修复方案:合并字段到同一个对象里
把所有字段定义放到同一个对象中,这才是Mongoose Schema的正确写法:
mongoose.Schema({ companyName: { type: String, required: true }, companyEmail: { type: String, required: true }, companySite: { type: String, required: true } })
验证修复效果
修改完再用Postman测试:
- 提交空对象:会同时抛出三个字段的必填错误
- 只传
companyName:会触发companyEmail和companySite的必填校验,返回对应的错误提示
这样就能完全符合你预期的校验逻辑了。
内容的提问来源于stack exchange,提问作者Patrickkx
相关产品推荐
相关产品推荐

