MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose/NextJS – Modell ist nicht definiert / Modell kann nach dem Kompilieren nicht überschrieben werden

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