Mongoose !: statics this undefined

Viewed 27
import mongoose, { Schema, Document, Model } from "mongoose";
import { IUser } from "./interface/User.interface";

const userSchema = new Schema<IUserDoc>({
  ...
});

// Problem
userSchema.statics.findUser = async function (
  email: Pick<IUser, "email">
): Promise<IUser | null> {
  console.log("this", this); // undefined

  try {
    // Cannot read properties of undefined (reading 'findOne')
    const user = await this.findOne({ email }).exec();


    return user;
  } catch (err: any) {
    return err;
  }
};

interface IUserDoc extends IUser, Document {
  _id: string;
}

interface IUserModel extends Model<IUserDoc> {
  findUser: (email: string) => Promise<IUser>;
}

const User = mongoose.model<IUserDoc, IUserModel>("User", userSchema);

export { User };

// Working
const findUserTest = async (email: string): Promise<IUser | null> => {
  try {
    const user = await User.findOne({ email }).exec();

    return user;
  } catch (err: any) {
    return err;
  }
};

mongoose -v 6.5.1

findUser does not work, but findUserTest works well. I think the problem is with userSchema, but I don't know what the problem is. I'd appreciate it if you could give me a hint.

0 Answers
Related