Size: a a a

NestJS — русскоязычное сообщество

2021 July 05

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
сервис и так торчит у него в экспорте
источник

DT

Dan The Great 🔥 in NestJS — русскоязычное сообщество
Нельзя
В рус асинк модуля-враппера возвращается такое

return {
     module: EmailLibraryModule,
     imports: [
       MailerModule.forRootAsync({
         useFactory: (...args) => {
           console.log({ args });
           // const smtpURL = configService.get(['core', 'SMTP_URL']) as string;
           const smtpURL = null;

           return {
             //todo: add transport from env
             transport: `smtp://${encodeURI(acc.user)}:${acc.pass}@${acc.smtp.host}:${acc.smtp.port}` ?? smtpURL,
           };
         },
       }),
     ],
     providers: [emailOptionsProvider, emailServiceProvider],
     exports: [emailServiceProvider],
   };


нужно понять, что нужно инжектить в MailerModule, чтобы достать smtpURL (который был передан уже EmailLibraryModule)
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
а конфиг если хочешь выдернуть, то этого не нужно делать
источник

DT

Dan The Great 🔥 in NestJS — русскоязычное сообщество
Да, это кастомный сервис, который под капотом юзает либу, а наружу дает только нужные методы
источник

DT

Dan The Great 🔥 in NestJS — русскоязычное сообщество
так а как его тогда передать?)
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
а зачем)
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
тыже его передаешь уже через опции сверху в свой враппер
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
у тя уже они есть
источник

DT

Dan The Great 🔥 in NestJS — русскоязычное сообщество
чтобы указать нужный smtp транспорт
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
хз то или нет
return {
     module: EmailLibraryModule,
     imports: [
       MailerModule.forRootAsync({
         useFactory: (configService:ConfigService) => {
           // console.log({ args });
           // const smtpURL = configService.get(['core', 'SMTP_URL']) as string;
           const smtpURL = null;

           return {
             //todo: add transport from env
             transport: `smtp://${encodeURI(acc.user)}:${acc.pass}@${acc.smtp.host}:${acc.smtp.port}` ?? smtpURL,
           };
         },
         inject: [ConfigService],
       }),
     ],
     providers: [emailOptionsProvider, emailServiceProvider],
     exports: [emailServiceProvider],
   };
источник

DT

Dan The Great 🔥 in NestJS — русскоязычное сообщество
короче смысл в том, чтобы не инджектить конфиг сервис 2 раза

сначала я его инджекчу при импорте модуля-враппера
EmailLibraryModule.forRootAsync({
     useFactory: (configService: ConfigService): { senderEmail: string; smtpURL: string } => ({
       senderEmail: configService.get(['core', 'EMAIL_SENDER']) as string,
       smtpURL: configService.get(['core', 'SMTP_URL']) as string,
     }),
     inject: [ConfigService],
   }),


сигнатура модуля-враппера такая:
@Module({})
export class EmailLibraryModule {
 static async forRootAsync(options: {
   useFactory: (...args: any[]) => { senderEmail: string; smtpURL: string };
   inject?: any[];
 }): Promise<DynamicModule> {


и в MailerModule получается хочу достать этот smtpURL без второго инжекта конфига
источник

DT

Dan The Great 🔥 in NestJS — русскоязычное сообщество
да, это рабочий метод, но тогда я использую 2 раза конфиг сервис, а надо 1)
по идее ведь smtpURL уже передался в useFactory, но я не знаю, как его достать
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
нужно вобще без конфиг сервиса) он для новичков кто не шарит в диай
источник

DT

Dan The Great 🔥 in NestJS — русскоязычное сообщество
а как тогда достать из энвов нужный конфиг?)
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
EmailLibraryModule.forRoot({senderEmail:process.env['core.EMAIL_SENDER'],smtpURL:process.env['core.SMTP_URL']})
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
и внутри уже можешь мапать на свой кастомный конфиг который будешь везде у себя юзать через Inject(MY_CONFIG)
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
и попути провайдить его в майл модуль
источник

DT

Dan The Great 🔥 in NestJS — русскоязычное сообщество
я бы так сделал, но у меня обязательно конфиг сервис нужен, потому что он маппит разные энвы для разных микросервисов и тд, короче его просто так не выпилить(
источник

DT

Dan The Great 🔥 in NestJS — русскоязычное сообщество
я еще тут погуглил, а можно сделать как-то через
console.log(options.inject);
   const result = await options.useFactory(...options.inject);
   console.log({ result });

?
и получить с result нужные опции?
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
можно так да
источник