Typegoose Mongoose错误:Model未注册对应Schema问题求助
Typegoose 模型注册报错
Schema hasn't been registered for model 解决方案 常见触发原因及对应修复方案
- 模型重复注册/注册时机错误
不要在多个文件中重复调用getModelForClass方法生成同一类的模型,也不要在模型还未完成注册的阶段就调用mongoose.model()获取该模型。建议统一在入口文件完成所有模型的注册逻辑,或者采用单例模式封装模型获取方法:// 单例封装示例 import { getModelForClass } from "@typegoose/typegoose"; import { User } from "./user.model"; export const UserModel = getModelForClass(User); // 所有需要用到UserModel的地方统一从该文件导入 - 类装饰器使用错误
确保模型类上正确添加了Typegoose相关装饰器,属性使用@prop修饰,不要遗漏装饰器标注。如果使用了继承基类,给基类添加@pre/@modelOptions装饰器时,要配置正确的schema参数,避免子类继承时生成schema失败。 - Mongoose连接实例不匹配
如果使用了多个Mongoose数据库连接,需要在调用getModelForClass时指定existingConnection参数绑定对应连接,不要混用全局连接和自定义连接的模型:import { mongoose } from "@typegoose/typegoose"; const customConn = await mongoose.createConnection(process.env.MONGO_URI_2).asPromise(); export const OrderModel = getModelForClass(Order, { existingConnection: customConn }); - 嵌套模型/关联模型未提前注册
如果模型中使用了@prop({ ref: () => OtherClass })做关联引用,需要保证OtherClass对应的模型在当前模型使用前已经完成注册,避免引用时找不到对应schema。 - TS编译配置问题
检查tsconfig.json中是否开启了experimentalDecorators和emitDecoratorMetadata配置,这两个选项未开启会导致Typegoose装饰器无法正常生成schema。
快速排查步骤
- 搜索全局代码,确认报错的模型类只调用了一次
getModelForClass - 确认模型导入路径没有大小写错误、相对路径错误导致的重复加载
- 测试在入口文件优先注册所有模型,再启动业务逻辑
内容的提问来源于stack exchange,提问作者Gurdeep Sharma
相关产品推荐
相关产品推荐

