NestJS 无法验证参数在当前 context/Mongoose 注入模型中是否可用

NestJS cannot verify argument is available in current context/Mongoose Inject Model

我遵循了 nestjs 网站上的 MongoDB 教程,但无法在我自己的项目中复制它,我已经克隆了 nextjs 存储库并验证了那里提供的 mongo 示例 运行很好。

这是我目前拥有的(缩小版):

app.module.ts

@Module({
  imports: [
    MongooseModule.forRoot('mongodb://localhost/nest')
  ],
  modules: [
    CampaignModule
  ]
})
export class AppModule implements NestModule {}
}

campaign.module.ts

@Module(
  {
    modules: [SharedModule],
    controllers: [CampaignController],
    components: [CampaignService],
    imports: [MongooseModule.forFeature([{name: 'Campaign', schema: campaignSchema}])]
  })
export class CampaignModule {}

campaign.service.ts

@Component()
export class CampaignService {
  constructor(@InjectModel(campaignSchema) private readonly campaignModel: Model<CampaignInterface>) {}
}

这按预期构建得很好但是当我 运行 它时我得到这个错误:

Nest can't resolve dependencies of the CampaignService (?). Please verify whether [0] argument is available in the current context.

所以因为在我的 app.module.ts 模块部分中有活动模块(到目前为止,在 mongodb 之前我如何让它工作得很好)我将它移到了导入部分MongooseModule 现在可以构建并且 运行 正常,但是 campaign.controller.ts 控制器内的路由根本没有注册,它们只是 return 404。这很奇怪,因为 nestjs 存储库中的示例在使用 MongooseModule 的导入中包含 CatsModule 并且它有效。

如有任何提示,我们将不胜感激。这也是我的活动对象的架构和界面:

export interface CampaignInterface extends Document, Campaign {
}

export const campaignSchema: any = new mongoose.Schema({
  campaignId: String
});

编辑 1 我将所有模块移动到我的 app.module.ts 文件的导入部分,就像我在导入中使用 CampaignModule 以及模块中的所有其他模块尝试它之前一样:[]。它现在在出现相同错误并且没有注册路由时立即失败。

好的,我知道发生了什么,

看起来,如果您在 @Module 装饰器中同时拥有模块:[] 和导入:[],模块:[] 将接管并完全忽略导入:[]。因此,在我的 campaign.module.ts 文件中,我将 SharedModule 从 modules: [] 移动到 imports: [] 在 MongooseModules.forFeature import 之后。它现在可以工作并写入 mongo!