Ich habe es geschafft, es zu beheben. Hier gab es zwei Probleme.
1) Die Variable "UserModel" ist in der Pre-Middleware nicht vorhanden. Gelöst durch Instanziieren von this.constructor, was das Problem anscheinend löst (muss weiter getestet werden)
2) Es gibt anscheinend ein Problem mit NextJS, das alles erstellt, es scheint, als würde es versuchen, ein neues Modell zu erstellen, wenn ich eine Funktion von UserModel verwende. Dies wird durch das Exportieren des bereits erstellten Modells behoben
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);