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 });No sé por qué user.save no funciona en mern mongodb. Tengo el mismo fragmento de código que funciona para otra persona pero no para mí.
Lo que hice es que obtuve al usuario activando la consulta en la línea uno después de tener ese usuario, debería poder usar la función user.save () aquí, pero lamentablemente está dando un error
//aqui esta el esquema de mi modelo
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 devolverá una Promesa. Por lo tanto, debe agregar la palabra clave 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 });