sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoose/NextJS:el modelo no está definido/no se puede sobrescribir el modelo una vez compilado

He conseguido arreglarlo. Había dos problemas aquí.

1) La variable "UserModel" no existe en el pre-middleware. Resuelto al crear una instancia de this.constructor que aparentemente resuelve el problema (necesitará más pruebas)

2) Aparentemente hay un problema con NextJS al construir todo, parece que está tratando de crear un nuevo modelo cada vez que uso cualquier función de UserModel. Esto se soluciona exportando el modelo ya creado

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);