- 1

Programación Modular y Deployment en Nest GS
02:33 - 2

Encapsulación de Lógica en Módulos con NestJS
10:53 - 3

Programación Modular en NestJS: Controladores y Entidades
04:04 - 4

Interacción entre Módulos en NestJS: Servicios y Controladores
10:55 - 5

Inyección de Dependencias en Arquitectura de Software
05:48 - 6

Tipos de Providers en NestJS: Use Class y Use Value
07:56 - 7

useFactory
09:10 - 8

Uso de Módulos Globales en NestJS para Inyecciones Compartidas
08:03
useFactory
Clase 7 de 17 • Curso de NestJS: Programación Modular, Documentación con Swagger y Deploy
Contenido del curso
NestJS permite inyecciones de servicios o datos que necesiten de alguna petición HTTP o algún proceso asíncrono.
Inyecciones Asíncronas
El tipo de inyección useFactory permite que realices un proceso asíncrono para inyectar un servicio o datos provenientes de una API.
A partir de NestJS v8, el servicio HttpService importado desde
@nestjs/commonfue deprecado. Instala la dependencia@nestjs/axiose impórtalo desde ahí. No deberás realizar ningún otro cambio en tu código. También debes asegurarte de importar el módulo HttpModule desde la misma dependencia.
import { HttpService } from '@nestjs/axios';
@Module({
providers: [
{
provide: 'DATA',
useFactory: async (http: HttpService) => {
return await http.get('' ).toPromise()
},
inject: [HttpService]
}
],
})
export class AppModule {}
La propiedad inject permite que inyectes (valga la redundancia) dentro de esta función asíncrona del useFactory otros servicios que este pueda necesitar. En el ejemplo anterior, se está haciendo una llamada a un request para obtener datos.
Importa estos datos en el controlador que lo necesite de la siguiente manera.
import { Controller, Inject } from '@nestjs/common';
@Controller()
export class AppController {
constructor(@Inject('DATA') private data: any[]) {}
}
Así podrás hacer uso de estos datos que fueron cargados de forma asíncrona.
Ten en cuenta que, al realizar una solicitud asíncrona, el controlador dependerá de la finalización de este proceso para estar disponible, pudiendo retrasar el inicio de tu aplicación. Esta funcionalidad suele utilizarse para conexiones de base de datos o procesos asíncronos similares.
Cuadro de código para inyección de servicios useFactory
// src/app.module.ts
import { Module, HttpModule, HttpService } from '@nestjs/common'; // 👈 imports
@Module({
imports: [HttpModule, UsersModule, ProductsModule],
controllers: [AppController],
providers: [
imports: [HttpModule, UsersModule, ProductsModule], // 👈 add HttpModule
...,
{
provide: 'TASKS',
useFactory: async (http: HttpService) => { // 👈 implement useFactory
const tasks = await http
.get('https://jsonplaceholder.typicode.com/todos')
.toPromise();
return tasks.data;
},
inject: [HttpService],
},
],
})
export class AppModule {}
// src/app.service.ts
import { Injectable, Inject } from '@nestjs/common';
@Injectable()
export class AppService {
constructor(
@Inject('API_KEY') private apiKey: string,
@Inject('TASKS') private tasks: any[], // 👈 inject TASKS
) {}
getHello(): string {
console.log(this.tasks); // 👈 print TASKS
return `Hello World! ${this.apiKey}`;
}
}
Contribución creada por: Kevin Fiorentino.