引入Stars组件致Next.js应用出现Mongoose Schema类型错误
检查组件命名/变量冲突
大概率是Stars组件内部的某个变量(比如名为Ct的构造函数/类)被意外混入了CreateReview的表单提交数据,或者和Mongoose Schema的类型定义重名覆盖了。比如Stars组件里的某个状态变量或导出名称,不小心和author字段的取值逻辑绑定到了一起,导致提交时把Ct传到了author字段,触发Mongoose的类型验证错误。排查表单提交的字段映射
嵌入Stars后,检查CreateReview的表单处理逻辑:是不是Stars组件绑定的字段名写错了?比如本该绑定rating字段,结果误绑定到了author字段;或者表单收集数据时,把Stars组件的内部标识(比如Ct)当成了author的值提交。直接在提交前加日志打印提交数据:const handleSubmit = (e) => { e.preventDefault(); console.log('待提交数据:', formData); // 后续提交逻辑 }看
author字段的实际值是不是Ct,就能快速定位问题。检查Schema的隐性修改
别光看Schema文件的定义,要确认有没有在CreateReview组件里动态修改过Review Schema的author字段类型。比如嵌入Stars后,组件里的某个逻辑(比如动态扩展Schema)不小心把author的类型改成了Ct这种无效值。另外也要确认Schema的类型导入是否正确,比如是不是把mongoose.Schema.Types.ObjectId误写成了其他变量。排查循环导入问题
如果Stars组件和CreateReview、Review Schema之间存在循环导入,可能导致Schema在加载时被意外污染。比如Stars导入了CreateReview,CreateReview又导入了Schema,加载顺序异常导致author的类型被替换成了组件的构造函数(也就是报错里的Ct)。
内容的提问来源于stack exchange,提问作者Ethan

