0

我在使用 typegoose 时遇到问题,我的课程如下:

class UserType1 extends Typegoose
      implements User{
    @prop({required: true, unique: true})
    _username: string | undefined;
    @prop({required: true})
    _password: string | undefined;

    constructor(username:string, password: string){
      this._username = username;
      this._password = password;
    }
    
    async saveToDB(): Promis<void>{ // This method is refrenced inside User Interface
       const model: ModelType<UserType1> = getModelForClass(UserType1);
       await model.create(this);
    }

    <Other methods inside class>
}

然后我像这样使用上面的代码序列:

  const u: User = new UserType1("username", "password");
  u.saveToDB();

然后,一条新记录保存在UserType1集合中,但它是空的。_username、_password 或其他属性都没有保存在记录中。它里面只有_id和一个名为“__v”的变量(我不知道它是从哪里来的。

4

2 回答 2

0

好的,所以我留下了我的代码并开始了一个新的干净的代码,它运行良好,所以我开始研究代码之间的差异,直到我发现导入包的这个小问题,它与我的代码无关: 而不是做

import {prop} from "@typegoose/typegoose"

我在做:

import {prop} from "typegoose"

由于它没有给我任何警告并且没有错误,我从未意识到这是问题所在。希望这个他

于 2020-08-24T08:21:20.997 回答
0

根据我在关于不使用未维护版本的评论中得到的答案,我建议以这种方式编写您的示例:

class UserType1 implements User {
  @prop({ required: true, unique: true })
  public _username!: string;
  @prop({ required: true })
  public _password!: string;

  static async default(this: ReturnModelType<typeof UserType1>, username: string, password: string): Promise<void> {
    await this.create({ _username: username, _password: password });
  }

  // <Other methods inside class>
}

const UserModel = getModelForClass(UserType1);

// somewhere in an async code block
await UserModel.default("user1", "somePassword");
于 2020-08-05T09:57:29.823 回答