J'ai réussi à le réparer. Il y avait deux problèmes ici.
1) La variable "UserModel" n'existe pas dans le pré middleware. Résolu en instanciant this.constructor qui résout apparemment le problème (nécessitera des tests supplémentaires)
2) Il y a apparemment un problème avec NextJS qui construit tout, il semble qu'il essaie de créer un nouveau modèle chaque fois que j'utilise une fonction de UserModel. Ceci est corrigé en exportant le modèle déjà créé
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);