user.save() 在我尝试保存模型时不是函数

user.save() is not a function when i am trying to save the model

  const user = User.findOne({email:req.body.email});
    
      if(!user){
        return next(new ErrorHander("User not found",404));
    
      }
 const resetToken = user.getResetPasswordToken

  await user.save({ validateBeforeSave: false });
  

我不知道为什么 user.save 在 mern 中不工作 mongodb 我有相同的代码供其他人使用但不适合我

我所做的是,在拥有该用户后,我通过在第一行中触发查询来获得用户,我应该可以在这里使用 user.save() 函数,但遗憾的是它给出了错误

//这是我的模型架构

const mongoose = require("mongoose");
const validator = require("validator");
const bcrypt = require("bcryptjs");
const crypto = require("crypto")

const jwt = require("jsonwebtoken");

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, "please Ente the your name"],
  },
  email: {
    type: String,
    required: [true, "Please Enter the email"],
    unique: [true],
    validate: [validator.isEmail, "Please Enter a valid email"],
  },
  password: {
    type: String,
    required: true,
    minlength: [8, "Passwaord must be more that 8 characters"],
    select: false,
  },
  avatar: {
    public_id: {
      type: String,
      required: true,
    },
    url: {
      type: String,
      required: true,
    },
  },
  role: {
    type: String,
    default: "user",
  },
  resetPasswordToken: String,
  resetPasswordTokenExpire: Date,

  createdAt: {
    type: Date,
    default: Date.now,
  },
});

userSchema.pre("save", async function (next) {
  if (!this.isModified("password")) {
    next();
  }

  this.password = await bcrypt.hash(this.password, 10);
});

userSchema.methods.comparePassword = async function (password) {
  return await bcrypt.compare(password, this.password);
};

userSchema.methods.getJWTToken = function () {
  return jwt.sign({ id: this._id }, process.env.JWT_SECRET, {
    expiresIn: process.env.JWT_EXPIRE,
  });
};

// compare password

// userSchema.methods.comparePassword = async function(enterPass){
//     return await bcyrypt.compare(enterPass,this.password)
// }

// Reset Password

userSchema.methods.getResetPasswordToken = function(){
  const resetToken = crypto.randomBytes(20).toString("hex");
  this.resetPasswordToken = crypto.createHash("sha256").update(resetToken).digest("hex");
  this.resetPasswordTokenExpire = Date.now +15*60*1000;

  return resetToken;
}

module.exports = mongoose.model("User", userSchema);

User.findOne 将 return 一个承诺。所以你需要添加 await 关键字。

const user = await User.findOne({email:req.body.email});
    
      if(!user){
        return next(new ErrorHander("User not found",404));
    
      }
 const resetToken = user.getResetPasswordToken

  await user.save({ validateBeforeSave: false });