Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

225
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!