Saya sudah berhasil memperbaikinya. Ada dua masalah di sini.
1) Variabel "UserModel" tidak ada di pra middleware. Dipecahkan dengan membuat instance this.constructor yang tampaknya memecahkan masalah (akan membutuhkan pengujian lebih lanjut)
2) Tampaknya ada masalah dengan NextJS membangun semuanya, sepertinya mencoba membuat model baru setiap kali saya menggunakan fungsi apa pun dari UserModel. Ini diperbaiki dengan mengekspor model yang sudah dibuat
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);