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