Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

221
Vistas
NestJS: hacer cumplir la implementación de un servicio en *tiempo de compilación*

Para ser breve:

Tengo un servicio, llamémoslo CatsService...

 import { Injectable } from '@nestjs/common'; @Injectable() export class CatsService { GetCat(id: number){ return id + 12345; } }

Posteriormente, un módulo desea usar este CatsService para inyectarlo en un constructor. También resuelve dinámicamente este CatsService

 import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; import { CatsService } from './cats.service'; import * as ProductionCatsService from "./production" import * as DevelopmentCatsService from "./development" const catsServiceProvider = { provide: CatsService, useValue: process.env.NODE_ENV === "development" ? DevelopmentCatsService : ProductionCatsService } @Module({ controllers: [CatsController], providers: [catsServiceProvider], exports:[CatsService] }) export class CatsModule {}

Ambas implementaciones de estos servicios están estrictamente vacías . Esto significa que la ruta /cats/:id devuelve:

{"statusCode":500,"message":"Internal server error"}

He tenido la idea desde que comencé a escribir esto para hacer que todo implemente una interfaz ICatsService.

Después de mucho juguetear, he creado una especie de solución:

  1. Tengo un archivo "service_interface", que tiene una clase abstracta llamada ICatsInterface con un método abstracto (GetCat)

  2. He hecho que cada una de estas implementaciones implemente este service_interface.

  3. He hecho que el controlador tome ICatsService en lugar de CatsService

Mi problema es que ahora, la cosa se compila, pero aparece el siguiente error:

 TypeError: this.catsService.GetCat is not a function at CatsController.get (/home/a/learning-nest/src/cats/cats.controller.ts:12:33) at /home/a/learning-nest/node_modules/@nestjs/core/router/router-execution-context.js:38:29 at processTicksAndRejections (node:internal/process/task_queues:96:5) at /home/a/learning-nest/node_modules/@nestjs/core/router/router-execution-context.js:46:28 at /home/a/learning-nest/node_modules/@nestjs/core/router/router-proxy.js:9:17

Simplemente ya no sé qué hacer. Aunque lo hice compilar, no puedo forzarlo a implementar la interfaz/clase abstracta que quiero. Me he asegurado de que tanto DevelopmentCatsService como ProductionCatsService tengan la implementación de GetCat. Ambos están marcados con @Injectable . La verdad es que no sé a dónde ir desde aquí.

¿Debo abandonar mi sueño de tener un mensaje de error en tiempo de compilación para cuando alguien no implemente los métodos que quiero implementar en mi servicio?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

He resuelto mi propio problema. fue muy simple

 import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; import { CatsService } from './cats.service'; import * as ProductionCatsService from "./production" import * as DevelopmentCatsService from "./development" const catsServiceProvider = { provide: CatsService, useValue: process.env.NODE_ENV === "development" ? DevelopmentCatsService : ProductionCatsService } @Module({ controllers: [CatsController], providers: [catsServiceProvider], exports:[CatsService] }) export class CatsModule {}

En el fragmento anterior, estoy importando "* como ProductionCatsService". ¡Esto hizo que ProductionCatsService fuera realmente un objeto que envolvía la implementación del servicio real que yo quería!

Perdón por la molestia, todos.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda