![](/img/trans.png)
[英]When I try comparing dates in Mongoose, I get Mongoose Server Error, why?
[英]Typescript error when I try to use mongoose methods
我有一個用戶界面:
import {Document} from "mongoose";
export interface IUser extends Document{
email: string;
password: string;
strategy: string;
userId: string;
isValidPassword(password: string): boolean;
}
和一個模式:
import { IUser } from "../interfaces/User";
const userSchema = new Schema({
strategy: {
type: String,
enum: ["local", "facebook", "google"]
},
email: {
type: String,
lowercase: true
},
password: {
type: String
},
userId: {
type: String
}
});
const User = mongoose.model<IUser>("user", userSchema);
現在,當我嘗試使用時:
const user :IUser= User.findOne({email});
if(!user){
done(null, false)
}
user.isValidPassword(password);
它說“TS2740:類型'DocumentQuery <IUser | null,IUser,{}>'缺少'IUser'類型的以下屬性:email,密碼,策略,用戶ID和另外53個。”
如果我嘗試從const user:IUser= User.findOne({email});
. 它不允許我使用user.isValidPassword(password);
而且我不想為用戶使用any
類型。
您應該使用await Model.findOne()
語句查詢user
文檔,請參閱Model.findOne() 。
它將返回類型為IUser | null
的user
。 IUser | null
。
然后,您可以調用實例方法- user.isValidPassword(password)
。
一個工作示例:
user.ts
:
import { Document, Schema, model } from 'mongoose';
interface IUser extends Document {
email: string;
password: string;
strategy: string;
userId: string;
isValidPassword(password: string): boolean;
}
const userSchema = new Schema({
strategy: {
type: String,
enum: ['local', 'facebook', 'google'],
},
email: {
type: String,
lowercase: true,
},
password: {
type: String,
},
userId: {
type: String,
},
});
const User = model<IUser>('user', userSchema);
export { User, IUser };
main.ts
:
import { IUser, User } from './user';
async function main() {
const email = 'teresa.teng@gmail.com';
const password = '123';
const user: IUser | null = await User.findOne({ email });
if (!user) {
return;
}
user.isValidPassword(password);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.