Nest.js 无法解析依赖项,找不到我的错误

Jua*_*gés 2 javascript node.js typeorm nestjs

我正在做一个 Nest.js 程序,但我找不到我的依赖问题。我搜索了很多,找到了很多关于这个问题的答案,但我不明白为什么我的代码不能\xc2\xb4t 工作。所以我有一个产品模块,其中有他的 DTO\xc2\xb4s、实体、控制器、服务和模块,此外它还有一个服务接口。

\n

产品控制器

\n
import { Controller, Get } from '@nestjs/common';\nimport { ProductServiceInterface } from './interface/product.service.interface'\n\n@Controller('products')\nexport class ProductController {\n  constructor(private readonly productService: ProductServiceInterface) {}\n\n  @Get()\n  getHello(): string {\n    return this.productService.test();\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

产品服务接口

\n
import { Injectable } from '@nestjs/common';\nimport {\n  CreateProductInput,\n  CreateProductOutput,\n} from '../dto/create-product.dto';\nimport { FindProductOutput } from '../dto/find-product.dto';\n\nexport interface ProductServiceInterface {\n  create(input: CreateProductInput): Promise<CreateProductOutput>;\n  findProduct(productId: string): Promise<FindProductOutput>;\n  test();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

产品服务

\n
import { Injectable } from '@nestjs/common';\nimport { ProductServiceInterface } from './interface/product.service.interface';\nimport {\n  CreateProductInput,\n  CreateProductOutput,\n} from './dto/create-product.dto';\nimport { Product } from './entity/product.entity';\nimport { InjectRepository } from '@nestjs/typeorm';\nimport { Repository } from 'typeorm';\nimport { FindProductOutput } from './dto/find-product.dto';\n//import WooCommerce from '../../config/woocomerce.config';\n\n@Injectable()\nexport class ProductService implements ProductServiceInterface {\n  constructor(\n    @InjectRepository(Product)\n    private productRepository: Repository<Product>,\n  ) {}\n\n  public async create(\n    productDto: CreateProductInput,\n  ): Promise<CreateProductOutput> {\n    const product = new Product();\n    product.name = productDto.name;\n    product.price = productDto.price;\n    product.imgUrl = productDto.imgUrl;\n\n    const savedProduct = await this.productRepository.save(product);\n    const productOutput = new CreateProductOutput();\n    productOutput.id = savedProduct.id;\n    return productOutput;\n  }\n\n  public async findProduct(idProduct: string): Promise<FindProductOutput> {\n    const fetchedProduct = await this.productRepository.findOne(idProduct);\n    const productOutput = new FindProductOutput();\n    productOutput.id = fetchedProduct.id;\n    productOutput.imgUrl = fetchedProduct.imgUrl;\n    productOutput.name = fetchedProduct.name;\n    productOutput.price = fetchedProduct.price;\n    return productOutput;\n  }\n\n  public test() {\n    return 'test'\n    // WooCommerce.get('products', {\n    //   pero_page: 20,\n    // }).then((resp) => {\n    //   return resp;\n    // });\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

产品模块

\n
import { ProductController } from './product.controller';\nimport { ProductService } from './product.service';\nimport { Product } from './entity/product.entity';\n\nimport { TypeOrmModule } from '@nestjs/typeorm';\nimport { Module } from '@nestjs/common';\n\n@Module({\n  imports: [TypeOrmModule.forFeature([Product])],\n  controllers: [ProductController],\n  providers: [ProductService],\n})\nexport class ProductModule {}\n
Run Code Online (Sandbox Code Playgroud)\n

应用程序模块

\n
import { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\nimport { AppService } from './app.service';\nimport { ConfigModule } from '@nestjs/config';\nimport configuration from 'src/config/configuration';\nimport { TypeOrmModule } from '@nestjs/typeorm';\nimport { TypeOrmConfigService } from 'src/config/typeorm.config.service';\nimport { ProductModule } from './modules/product/product.module';\n\n@Module({\n  imports: [\n    ConfigModule.forRoot({\n      load: [configuration],\n      isGlobal: true,\n    }),\n    TypeOrmModule.forRootAsync({\n      useClass: TypeOrmConfigService,\n    }),\n    ProductModule,\n  ],\n  controllers: [AppController],\n  providers: [AppService],\n})\nexport class AppModule {}\n
Run Code Online (Sandbox Code Playgroud)\n

我希望这段代码足以知道我的错误在哪里,我不喜欢让其他人为我解决这个问题,但我已经观察我的代码几个小时了,不知道如何解决这个依赖问题。

\n

Jay*_*iel 5

接口在运行时消失并变成{}Object。Nest 使用参数类型元数据来确定应该注入的内容(通常通过ClassType.name)。您有两种选择来解决此问题

  1. 使用抽象类而不是接口。这使得该类在运行时仍然可见,因此ClassType.name仍然有效。

  2. 用作@Inject('CustomToken')设置 Nest 需要注入的元数据的方法。然后,您需要确保使用类似的方法注册自定义提供程序

{
  provide: 'CustomToken',
  useClass: ClassToBeUsed
}
Run Code Online (Sandbox Code Playgroud)

这些方法中的任何一种都应该可以解决您的问题。