Jua*_*gés 2 javascript node.js typeorm nestjs
我正在做一个 Nest.js 程序,但我找不到我的依赖问题。我搜索了很多,找到了很多关于这个问题的答案,但我不明白为什么我的代码不能\xc2\xb4t 工作。所以我有一个产品模块,其中有他的 DTO\xc2\xb4s、实体、控制器、服务和模块,此外它还有一个服务接口。
\n产品控制器
\nimport { 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}\nRun Code Online (Sandbox Code Playgroud)\n产品服务接口
\nimport { 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}\nRun Code Online (Sandbox Code Playgroud)\n产品服务
\nimport { 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}\nRun Code Online (Sandbox Code Playgroud)\n产品模块
\nimport { 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 {}\nRun Code Online (Sandbox Code Playgroud)\n应用程序模块
\nimport { 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 {}\nRun Code Online (Sandbox Code Playgroud)\n我希望这段代码足以知道我的错误在哪里,我不喜欢让其他人为我解决这个问题,但我已经观察我的代码几个小时了,不知道如何解决这个依赖问题。
\n接口在运行时消失并变成{}或Object。Nest 使用参数类型元数据来确定应该注入的内容(通常通过ClassType.name)。您有两种选择来解决此问题
使用抽象类而不是接口。这使得该类在运行时仍然可见,因此ClassType.name仍然有效。
用作@Inject('CustomToken')设置 Nest 需要注入的元数据的方法。然后,您需要确保使用类似的方法注册自定义提供程序
{
provide: 'CustomToken',
useClass: ClassToBeUsed
}
Run Code Online (Sandbox Code Playgroud)
这些方法中的任何一种都应该可以解决您的问题。