【问题标题】:Mongoose loadClass issue with TypeScriptTypeScript 的 Mongoose loadClass 问题
【发布时间】:2019-12-04 20:06:33
【问题描述】:

我正在利用猫鼬class schemas

并在我的 Node 项目中使用 TypeScript。

我已经关注 Mongoose the Typescript way...? 以确保我的模型知道我定义的架构,所以我已经自动完成等。

但是,使用模式类变得更加棘手。 正如他们的文档中所写:

loadClass() 函数可让您引入方法、静态和 来自 ES6 类的虚拟对象。一个类方法映射到一个模式方法,一个 静态方法映射到静态模式,getter/setter 映射到 虚拟机。

所以我的代码看起来像:

interface IUser extends mongoose.Document {
  firstName: string,
  lastName: string
};

const userSchema = new mongoose.Schema({
  firstName: {type:String, required: true},
  lastName: {type:String, required: true},
});

class UserClass{
   static allUsersStartingWithLetter(letter: string){
       return this.find({...});
   }
   fullName(this: IUser){
      return `${this.firstName} ${this.lastName}`
   }
}
userSchema.loadClass(UserClass);

const User = mongoose.model<IUser>('User', userSchema);
export default User;

我的目标是 TypeScript 能够理解:

  1. User 有一个方法 allUsersStartingWithLetter
  2. User 实例有一个方法 fullName

在当前配置中它没有。 我自己无法完成。

【问题讨论】:

  • 您能告诉我您是如何创建新模型的吗?你不能使用 model.create(你的道具),你必须使用 new User().save()。如果你这样做,它正在工作。 (我有同样的问题)

标签: javascript node.js mongodb typescript mongoose


【解决方案1】:

您的UserClass 需要从mongoose 扩展Model。您似乎缺少一些必需的代码来为您工作。

从您作为参考共享的链接中,这里有一个指南,应该可以通过完整的代码示例解决您的问题。

https://stackoverflow.com/a/58107396/1919397

【讨论】:

猜你喜欢
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 2015-10-26
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
相关资源
最近更新 更多