从mongodb、mongoose和typescript访问用户文档的属性

jdzmm42g  于 2022-11-03  发布在  Go
关注(0)|答案(1)|浏览(137)

我试图理解为什么我不能从用户文档访问某些属性。当查询用户文档的数据库时,我想访问它的属性。
我的用户模型:

import mongoose from 'mongoose';

export interface IUser extends mongoose.Document {
    email: string;
    password: string;
}

const UserSchema = new mongoose.Schema({
    email: { type: String, required: true, unique: true },
    password: { type: String, required: true },
});

export default mongoose.model<IUser>('User', UserSchema);

查询:

const user = User.findById(payload.sub);
const { email } = user;

这是我得到的打字错误:

Property 'email' does not exist on type 'Query<(IUser & { _id: ObjectId; }) | null, IUser & { _id: ObjectId; }, {}, IUser>'.

我不明白为什么会出现此错误。我似乎也无法访问_id属性。

von4xj4u

von4xj4u1#

查询数据库是一个异步的过程。Mongoose实际上不会直接返回Promise,而是返回它自己的类来扩展Promise。但是,您仍然可以使用await来等待它解析:

const user = await User.findById(payload.sub);

if (!user) { /* ??? */ } // no user found

const { email } = user;

您还应该检查该用户是否存在,因为如果没有找到这样的用户,此方法也会返回null

相关问题