Mongoose+Next.js运行时报错TypeError:无法读取undefined的'Token'属性
问题解决方法
你遇到的报错本质是mongoose.models为undefined时直接读取其Token属性导致的,按以下步骤排查即可解决:
- 修改Token模型的导出逻辑,增加空值判断,避免直接读取undefined的属性,将原导出代码:
export default mongoose.models.Token || mongoose.model('Token', TokenSchema);
修改为带可选链的兼容写法:
export default mongoose.models?.Token || mongoose.model('Token', TokenSchema);
- 排查所有导入Token模型的文件,确认没有在标记了
'use client'的客户端组件中导入该模型。Mongoose是服务端专属依赖,客户端运行环境不会初始化mongoose实例,自然不存在mongoose.models对象,会直接触发该报错。 - 确认Token模型的导入时机,保证是在mongoose初始化连接逻辑执行之后再导入该模型,避免提前加载模型时mongoose实例还未完成挂载。
你之前的User模型没有触发报错,只是因为User模型的加载时机刚好都在mongoose初始化完成之后,没有触发mongoose.models为undefined的场景,并非User模型的代码存在特殊性。
内容的提问来源于stack exchange,提问作者Antonio Pavicevac-Ortiz
相关产品推荐
相关产品推荐

