阅读 MongoDB technique 上的 NestJS 文档,我发现了一个令人困惑的例子:
@Injectable()
export class CatsService {
constructor(@InjectModel(Cat.name) private catModel: Model<CatDocument>) {}
async create(createCatDto: CreateCatDto): Promise<Cat> {
const createdCat = new this.catModel(createCatDto);
return createdCat.save();
}
async findAll(): Promise<Cat[]> {
return this.catModel.find().exec();
}
}
让我困惑的一行是构造函数; @InjectModel
的位置是 Cat.name
。但是,在 cats.schema.ts 文件中,没有从另一个类继承,也没有任何具有该名称的静态属性:
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
export type CatDocument = Cat & Document;
@Schema()
export class Cat {
@Prop()
name: string;
@Prop()
age: number;
@Prop()
breed: string;
}
export const CatSchema = SchemaFactory.createForClass(Cat);
我是否遗漏了某些东西,或者它可能是文档中的“错误”?
答案 0 :(得分:3)
Cat.name
在这种情况下是指所有类(实际上所有函数都具有)的固有静态属性 name
。这为我们提供了一个内置常量,我们无需自己编写即可引用该常量,但如果您愿意,也可以使用字符串 'Cat'
。在这种情况下,Cat.name
是字符串 'Cat'
,只是在所有类(和函数)中内置的一种不同的引用方式。