我正在利用mongoose类模式。
并为我的 Node 项目使用 TypeScript。
为了确保我的模型知道我定义的模式,所以我有自动完成等。
然而,模式类变得更加棘手。正如他们文件中所写的:
loadclass()函数允许您从ES6类中提取方法、静态和虚拟化。类方法映射到模式方法,静态方法映射到模式静态,getters/setters映射到虚拟化。
所以我的代码看起来像:
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将理解:
用户
有一个方法allUsersStartingWithLetter
用户
实例有一个方法fullName
在当前配置中,它没有。我自己无法完成。
您的Userclass
需要从mongoose
扩展Model
。您似乎缺少一些为您工作所需的代码。
从您作为参考分享的链接来看,这里有一个指南,可以通过完整的代码示例解决您的问题。
https://stackoverflow.com/a/58107396/1919397
您考虑过添加<code>扩展mongoose吗。将建模为UserClass
?
class UserClass extends mongoose.Model<IUser> {
static allUsersStartingWithLetter(letter: string){
return this.find({...});
}
fullName(this: IUser){
return `${this.firstName} ${this.lastName}`
}
}
真的需要用到类吗?我可以使用接口来完成这个任务,而不需要使用类。这里有一个例子:
/* eslint-disable func-names */
import mongoose from 'mongoose';
export interface Foo {
id?: string;
name: string;
createdAt?: Date;
updatedAt?: Date;
}
export type FooDocument = mongoose.Document & Foo;
const fooSchema = new mongoose.Schema(
{
name: { type: String, required: true },
},
{ timestamps: true }
);
fooSchema.methods.bar = function (): void {
const foo = this as FooDocument;
foo.name = 'bar';
};
const FooModel = mongoose.model<FooDocument>('foos', fooSchema);
export default FooModel;
这样,您可以使用Foo
接口来处理具有反转相关性的方法。您存储库中的它们将返回<code>Foo</code>而不是FooDocument。。。
额外:如果在数据库请求中使用< code>lean(),则返回的是< code>Foo接口。更多精益信息请点击此处
问题内容: 我正在尝试验证并保存具有以下结构的Passport配置文件: http://passportjs.org/guide/profile/ 这是我想出的方案: 电子邮件具有名为“ type”的属性,该属性保留用于猫鼬类型。我该如何解决? 问题答案: 您需要使用对象定义字段:
问题内容: 我从Mongoose网站上阅读了快速入门,几乎复制了代码,但是无法使用Node.js连接MongoDB。 这是我的代码。控制台仅打印,不打印。我哪里错了? 问题答案: 调用时,它将建立与数据库的连接。 但是,您在以后的某个时间点(处理请求时)附加了事件侦听器,这意味着该连接可能已经处于活动状态,并且该事件已经被调用(您尚未监听它)。 。 您应该重新排列代码,以使事件处理程序尽可能(及时
问题内容: 我目前正在尝试向我的猫鼬模式中添加静态方法,但是我找不到它无法通过这种方式工作的原因。 我的模特: IUser: 如果我现在尝试拨打电话,则会出现以下错误 我知道我没有在任何地方定义方法,但我真的不知道在哪里可以放置它,因为我不能只是将静态方法放到接口中。希望您能帮助我找到错误,在此先感谢! 问题答案: 我认为您遇到了我刚刚遇到的同样问题。您可以拨打此电话。几个教程让您从这样的模型中调
问题内容: 我使用了来自Maven回购的log4j-1.2.17捆绑包。我尝试在捆绑软件中执行此代码(我的捆绑软件调用了log4j-1.2.17捆绑软件) 但是我有错误 捆绑包已按顺序加载 如何解决这个错误?拜托,对不起我的英语。最好的问候,亚瑟。 问题答案: 由于您的Log4j类似乎已由sun.misc类加载器加载,我认为某些东西正在从OSGi外部提供log4j类。有Log4J条目解释了为什么它
问题内容: 我已经查看了网站上的一些问题,但还没有弄清楚我在做什么错。我有一些这样的代码: 我不确定在中间应该做什么以使其正确更新数据库。我已经尝试了很多东西,但是无法撤消以找出所有我尝试过的东西。我一整夜都花了时间,我希望它能正常工作。 这几乎是我想要的,我想知道是否有任何方法可以在条件部分 我会继续玩弄它。 问题答案: 这正是我想要的,只有一行。:D完美!
我想解决的是res.Code下面的红线问题 下面是loginApi接口的类型定义: 其中UserType类型的定义: IResponse类型的定义: 为什么Promise的返回值Code,Data,Msg下面都带红线? 代码: