Есть ли способ получить доступ к базе данных из файла модуля в NestJS?

Я разрабатываю функцию отправки электронной почты с помощью nestJS, я использую Nest Mailer; Есть ли способ получить хост, порт, пользователя и перейти из полей, хранящихся в таблице базы данных? Кстати, я использую TypeORM. В файле .module я настраиваю плагин следующим образом:

import { Module } from '@nestjs/common';
import { MailsController } from './controllers/mails.controller';
import { HandlebarsAdapter } from '@nestjs-modules/mailer/dist/adapters/handlebars.adapter';
import { MailsService } from './services/mails.service';
import { MailerModule } from '@nestjs-modules/mailer';

@Module({
  controllers: [MailsController],
  providers: [MailsService],
  imports: [
    MailerModule.forRoot({
      transport: {
        host: 'smtp.gmail.com',
        port: 587,
        ignoreTLS: true,
        secure: true,
        auth: {
          user: "",
          pass: "",
        },
      },
      defaults: {
        to: '[email protected]',
        from: '"nest-modules" <[email protected]>',
      },
      template: {
        dir: __dirname + '/templates',
        adapter: new HandlebarsAdapter(),
        options: {
          strict: true,
        },
      },
    }),],
  exports: [MailsService],
})
export class MailsModule { }


person VenomBerry    schedule 25.12.2020    source источник


Ответы (1)


Если у MailerModule есть метод forRootAsync, в котором вы можете определить imports, inject и useFactory, тогда да, вы можете позвонить в базу данных, предполагая, что у вас есть сущность, настроенная для этого. Возможно что-то вроде

@Module({
  imports: [
    MailerModule.forRootAsync({
      imports: [TypeOrmModule.forFeature([MailerConfigEntity])],
      inject: [getRepositoryToken(MailerConfigEntity)],
      useFactory: async (mailerRepo: Repository<MailerConfigEntity>) => {
        const config = await mailerRepo.find();
        return { configObjectUsingConfig };
      }),
    }),
  ],
})
person Jay McDoniel    schedule 29.12.2020
comment
Есть ли способ использовать в этом коде сервис-разработчик? - person VenomBerry; 31.12.2020
comment
Абсолютно. Думайте о массиве inject как о своем конструкторе, если вы передаете ему токены инъекций (обычно классы, но иногда и строки), вы можете внедрить их в метод useFactory и использовать эти внедренные свойства в их - person Jay McDoniel; 31.12.2020