babel 中嵌套的依赖注入,尤其是 mongoose

Posted

技术标签:

【中文标题】babel 中嵌套的依赖注入,尤其是 mongoose【英文标题】:Dependency injection of nest in babel particularly with mongoose 【发布时间】:2019-03-17 15:30:40 【问题描述】:

我正在遵循 NestJs 关于 Mongoose 的指南,但使用 Babel 时,我在尝试注入我的架构时遇到了错误。代码非常简单,和 typescript 的例子一样,只是使用了 babel。

这是我的主要模块

import  Module  from '@nestjs/common';
import  MongooseModule  from '@nestjs/mongoose';
import  EventModule  from './events/event-module';

@Module(
  imports: [
    MongooseModule.forRoot(process.env.MONGO_URI),
    EventModule,
  ],
)
export class AppModule 

这是最简单的模式示例

import  Schema  from 'mongoose';

export const EventSchema = new Schema(
  title: String,
  description: Number,
);

模块事件模块:

import  Module  from '@nestjs/common';
import  MongooseModule  from '@nestjs/mongoose';

import  EventController  from "./event-controller";
import  EventService  from "./event-service";
import  EventSchema  from '../schemas/event-schema';

@Module(
  imports: [
    MongooseModule.forFeature([
       name: 'Event', schema: EventSchema 
    ])
  ],
  controllers: [EventController],
  providers: [
    EventService,
  ],
)
export class EventModule 

最后,我希望使用架构的服务:

import  Injectable  from '@nestjs/common';
import  InjectModel  from '@nestjs/mongoose';
import  EventSchema  from '../schemas/event-schema';

@Injectable()
export class EventService 
  @InjectModel(EventSchema) eventModel;
  async getAll() 
    return await this.eventModel.find().exec();
  

问题是当我从控制器调用getAll 时,发现eventModel 是未定义的!实例化时不会引发错误。抛出的错误是:

TypeError: Cannot read property 'find' of undefined
    at EventService._callee$ (D:\.../event-service.js:9:34)
    at tryCatch (D:\...\node_modules\babel-polyfill\node_modules\regenerator-runtime\runtime.js:65:40)

是否有可能在 babel 中,nestjs 的依赖注入工作方式不同? InjectModel 应该如何工作或如何与 babel 一起使用?

非常感谢您,任何建议或提示都非常感谢和接受

问候

【问题讨论】:

可以试试@Bind(InjectModel(EventSchema)) 注入构造函数有效吗? 构造函数不可装饰,参数也不可装饰。 @Bind 不适用于 InjectModel 你说的constructor is not decorable是什么意思?对不起,如果这是显而易见的事情。 【参考方案1】:

有一个错误:

import  Injectable  from '@nestjs/common';
import  InjectModel  from '@nestjs/mongoose';
import  EventSchema  from '../schemas/event-schema';

@Injectable()
export class EventService 
  @InjectModel(EventSchema) eventModel;
  async getAll() 
    return await this.eventModel.find().exec();
  

这一行

@InjectModel(EventSchema) eventModel;

应该是@InjectModel('Event') eventModel

【讨论】:

以上是关于babel 中嵌套的依赖注入,尤其是 mongoose的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Angular 中的依赖注入将属性指令实例传递给嵌套组件

如何从嵌套类通过依赖注入服务进行访问?

嵌套类中的依赖注入

[JUnit] JUnit5 基础 3 - 依赖注入,假设(assume),开启/禁用测试 与 嵌套测试

FastAPI之嵌套依赖注入

在装饰器中使用全局嵌套模块