Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

224
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda