【问题标题】:What is `Cat.name` in NestJS mongoose docs?NestJS mongoose 文档中的“Cat.name”是什么?
【发布时间】:2021-01-12 04:53:51
【问题描述】:

阅读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);

我是否遗漏了什么或者可能是文档中的“错误”?

【问题讨论】:

    标签: nestjs


    【解决方案1】:

    Cat.name 在这种情况下是指所有类(实际上所有函数都具有)的固有静态属性name。这为我们提供了一个内置常量,我们可以引用它而无需编写自己的,但如果您愿意,也可以使用字符串 'Cat'。在这种情况下,Cat.name 是字符串 'Cat',只是一种不同的引用方式,它内置于所有类(和函数)中。

    JavaScript docs on Function.name

    【讨论】:

    • 噢噢噢!好的!所以它指的是 THAT 名称。我对 cat 本身有一个名字这一事实感到困惑,我只专注于理解如何在不实例化的情况下访问该属性 haha​​hahahahaha :D 谢谢你的澄清!
    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2021-07-20
    • 2013-12-28
    • 2015-10-26
    • 2018-05-02
    • 2022-07-14
    • 2018-11-09
    • 2016-01-09
    相关资源
    最近更新 更多