Nest.js无法解决依赖关系

时间:2019-04-23 13:49:41

标签: javascript node.js typescript dependency-injection nestjs

无法弄清楚我的代码有什么问题。 (我是nestjs的新手,我正在尝试通过将一些应用程序传递给它来学习它)。控制台日志显示:

  

嵌套无法解析UrlsAfipService(?)的依赖项。请   确保索引为[0]的参数在ApiModule中可用   上下文。

UrlsAfipService

import { Injectable } from '@nestjs/common';
import { AfipUrls } from './urls'

@Injectable()
export class UrlsAfipService {

  constructor(
    private readonly afipUrls: AfipUrls,
  ) {}

  getWSAA () {
    return this.afipUrls.homo().wsaa; // <- change to prod() for production
  }

  getService (service: string) {
    return this.afipUrls.homo().service.replace('{service}', service)
  }
}

AfipUrls

export class AfipUrls {
    homo() {
      return {
        wsaa: 'https://url.com',
        service: 'https://url.com'
      }
    }

    prod() {
      return {
        wsaa: 'url.com',
        service: 'url.com'
      }
    }
}

ApiModule

import { Module } from '@nestjs/common';
import { ApiController } from './api.controller';
import { UrlsAfipService } from './urls-afip.service'
import { WsaaService } from './wsaa.service'
import { DescribeService } from './describe.service';

@Module({
  controllers: [ApiController],
  providers: [UrlsAfipService, WsaaService, DescribeService]
})

export class ApiModule {}

AppModule

import { Module } from '@nestjs/common';

import { ApiModule } from './api/api.module';

import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [ApiModule],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

1 个答案:

答案 0 :(得分:1)

您已将AfipUrls声明为UrlsAfipService的依赖项,但未在任何模块中提供。

因此,您必须将AfipUrls添加到providers的{​​{1}}数组中。然后可以将其注入。

ApiModule

但是请注意,代码库中特定于编码环境的值可能是代码的味道。考虑创建一个providers: [UrlsAfipService, WsaaService, DescribeService, AfipUrls] // ^^^^^^^^ 来封装特定于环境的变量,这些变量是使用ConfigService从环境变量或.env文件中读取的。有关更多信息,请参见此answer