Udało mi się to naprawić. Pojawiły się tutaj dwa problemy.
1) Zmienna „UserModel” nie istnieje we wstępnym oprogramowaniu pośredniczącym. Rozwiązany przez utworzenie instancji this.constructor, który najwyraźniej rozwiązuje problem (będzie wymagał dalszych testów)
2) Najwyraźniej jest problem z budowaniem wszystkiego przez NextJS, wygląda na to, że próbuje utworzyć nowy model za każdym razem, gdy używam dowolnej funkcji z UserModel. Naprawiono eksportowanie już utworzonego modelu
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);