MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose/NextJS - Il modello non è definito/Non è possibile sovrascrivere il modello una volta compilato

Sono riuscito a risolverlo. C'erano due problemi qui.

1) La variabile "UserModel" non esiste nel pre middleware. Risolto istanziando this.constructor che apparentemente risolve il problema (saranno necessari ulteriori test)

2) Apparentemente c'è un problema con NextJS che costruisce tutto, sembra che stia cercando di creare un nuovo modello ogni volta che utilizzo una funzione da UserModel. Questo problema è stato risolto esportando il modello già creato

const mongoose = require("mongoose");
const errorHandler = require("../helpers/errorHandler");

const Schema = mongoose.Schema;

const UserSchema = new Schema({
  userName: String,
  userPassword: String,
  userBanned: Boolean,
  userType: String,
  registeredDate: { type: Date, default: Date.now },
  registeredIP: String,
  lastLoginDate: { type: Date, default: Date.now },
  lastLoginIP: String,
});

UserSchema.pre("save", async function () {
  try {
    const User = this.constructor;
    const userExists = await User.find({
      userName: this.get("userName"),
    })
      .lean()
      .exec();
    if (userExists.length > 0) {
      throw new Error(errorHandler.errors.REGISTER_USERNAME_EXISTS);
    }
  } catch (err) {
    throw new Error(errorHandler.errors.REGISTER_USERNAME_EXISTS);
  }
});

module.exports = mongoose.models.User || mongoose.model("User", UserSchema);