【问题标题】:NestJS - How to call service method from mongoose schema inside custom validationNestJS - 如何在自定义验证中从猫鼬模式调用服务方法
【发布时间】:2020-07-21 22:34:24
【问题描述】:

我有两个模块-

课程

-courses.module.ts
-courses.services.ts
-courses.schema.ts
-courses.controller.ts

-groups.module.ts
-groups.services.ts
-groups.schema.ts
-groups.controller.ts

courses.module.ts 的内容是-

import { Module } from '@nestjs/common';
import { CoursesService } from './courses.service';
import { CoursesController } from './courses.controller';
import { MongooseModule, getModelToken } from '@nestjs/mongoose';
import { CourseSchema } from './schemas/course.schema';
import { GroupsService } from 'src/groups/groups.service';
import { GroupsModule } from 'src/groups/groups.module';

@Module({
  imports: [
    MongooseModule.forFeature([{ 
      name: 'Course', schema: CourseSchema }]),
    GroupsModule,

  ],

  providers: [
    CoursesService,
  ],
  controllers: [CoursesController],
  exports: [CoursesService],
})
export class CoursesModule {}

groups.module.ts 的内容是-

import { Module } from '@nestjs/common';
import { GroupsService } from './groups.service';
import { GroupsController } from './groups.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { GroupSchema } from './schemas/group.schema';

@Module({
  imports: [
    MongooseModule.forFeature([{ name: 'Group', schema: GroupSchema }]),
  ],
  providers: [GroupsService],
  controllers: [GroupsController],
  exports:[
    GroupsService, 
  ]
})
export class GroupsModule {}

我想像这样在 course.schema.ts 中调用 GroupsService 的方法-

import * as mongoose from 'mongoose';
import { GroupsService } from 'src/groups/groups.service';
import { GroupsModule } from 'src/groups/groups.module';
import { GroupSchema } from 'src/groups/schemas/group.schema';


export const CourseSchema = new mongoose.Schema({

    groupId: {
        type: Number,
        isAsync: true,
        validate(value) {
            if(GroupsService.getByCode()==='xyz'){
              return false;
            }

        }
    },
})

我怎样才能做到这一点?我浏览了 NestJS 的文档,但没有找到任何合适的方法来直接在模式中注入服务并在自定义验证期间访问服务方法。

【问题讨论】:

    标签: node.js typescript mongoose nestjs


    【解决方案1】:

    在您的 main.ts 中导出应用引用。

    export let app;
    async function bootstrap() {
       app = await NestFactory.create(AppModule);
    }
    bootstrap();
    

    然后在你的架构文件中你可以做这样的事情

    import { app } from 'path/to/main.ts';
    
    const service = app.get(GroupsService);
    

    这里您使用服务容器从 GroupsService 获取引用。

    【讨论】:

      猜你喜欢
      • 2014-10-08
      • 2019-12-22
      • 2021-08-11
      • 2018-01-21
      • 1970-01-01
      • 2021-06-20
      • 2017-05-03
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多