javascript - Nest.js 无法解析依赖,找不到我的错误
问题描述
我正在做一个 Nest.js 程序,但我找不到我的依赖问题。我进行了很多搜索,并找到了很多有关此问题的答案,但我无法弄清楚为什么我的代码不起作用。所以我有一个产品模块,它有他的 DTO、实体、控制器、服务和模块,此外它还有一个服务接口。
产品控制器
import { Controller, Get } from '@nestjs/common';
import { ProductServiceInterface } from './interface/product.service.interface'
@Controller('products')
export class ProductController {
constructor(private readonly productService: ProductServiceInterface) {}
@Get()
getHello(): string {
return this.productService.test();
}
}
产品服务接口
import { Injectable } from '@nestjs/common';
import {
CreateProductInput,
CreateProductOutput,
} from '../dto/create-product.dto';
import { FindProductOutput } from '../dto/find-product.dto';
export interface ProductServiceInterface {
create(input: CreateProductInput): Promise<CreateProductOutput>;
findProduct(productId: string): Promise<FindProductOutput>;
test();
}
产品服务
import { Injectable } from '@nestjs/common';
import { ProductServiceInterface } from './interface/product.service.interface';
import {
CreateProductInput,
CreateProductOutput,
} from './dto/create-product.dto';
import { Product } from './entity/product.entity';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { FindProductOutput } from './dto/find-product.dto';
//import WooCommerce from '../../config/woocomerce.config';
@Injectable()
export class ProductService implements ProductServiceInterface {
constructor(
@InjectRepository(Product)
private productRepository: Repository<Product>,
) {}
public async create(
productDto: CreateProductInput,
): Promise<CreateProductOutput> {
const product = new Product();
product.name = productDto.name;
product.price = productDto.price;
product.imgUrl = productDto.imgUrl;
const savedProduct = await this.productRepository.save(product);
const productOutput = new CreateProductOutput();
productOutput.id = savedProduct.id;
return productOutput;
}
public async findProduct(idProduct: string): Promise<FindProductOutput> {
const fetchedProduct = await this.productRepository.findOne(idProduct);
const productOutput = new FindProductOutput();
productOutput.id = fetchedProduct.id;
productOutput.imgUrl = fetchedProduct.imgUrl;
productOutput.name = fetchedProduct.name;
productOutput.price = fetchedProduct.price;
return productOutput;
}
public test() {
return 'test'
// WooCommerce.get('products', {
// pero_page: 20,
// }).then((resp) => {
// return resp;
// });
}
}
产品模块
import { ProductController } from './product.controller';
import { ProductService } from './product.service';
import { Product } from './entity/product.entity';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Module } from '@nestjs/common';
@Module({
imports: [TypeOrmModule.forFeature([Product])],
controllers: [ProductController],
providers: [ProductService],
})
export class ProductModule {}
应用模块
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import configuration from 'src/config/configuration';
import { TypeOrmModule } from '@nestjs/typeorm';
import { TypeOrmConfigService } from 'src/config/typeorm.config.service';
import { ProductModule } from './modules/product/product.module';
@Module({
imports: [
ConfigModule.forRoot({
load: [configuration],
isGlobal: true,
}),
TypeOrmModule.forRootAsync({
useClass: TypeOrmConfigService,
}),
ProductModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
我希望这段代码足以知道我的错误在哪里,我不喜欢让其他人为我解决这个问题,但我已经看了好几个小时的代码,不知道如何解决这个依赖问题。
解决方案
接口在运行时消失并变为{}
or Object
。Nest 使用参数类型元数据来确定应该注入什么(通常通过ClassType.name
)。你有两个选择来解决这个问题
使用抽象类而不是接口。这使得该类在运行时仍然可见,因此
ClassType.name
仍然有效。用作设置Nest
@Inject('CustomToken')
需要注入的元数据的方式。然后,您需要确保使用类似的东西注册自定义提供程序
{
provide: 'CustomToken',
useClass: ClassToBeUsed
}
这些方法中的任何一种都应该可以解决您的问题。
推荐阅读
- java - 使用休眠以列表形式获取对象
- runtime-error - 在声明模块的 io 时出现意外错误:“尝试重新分配绑定到 chisel3.core.UInt@29a”
- php - Symfony 3:将对象/多维数组传递到 ChoiceType 表单时,数组到字符串的转换错误
- css - 正确遵守小写短介词(“and”、“of”、“in”等)的 CSS 标题大小写
- c# - 自动映射器和空字典
- python - 在任何语言中是否有一个相等三元运算符的概念,它检查是否相等并返回检查的一侧或默认值
- mysql - 在 Mysql 中使用 join、sum 和 group by
- plpgsql - 未终止的美元报价开始于头寸
- certificate - 带证书的签名
- statusbar - 如何在 Visual Studio 2019 中查看光标的当前行/列