почему я продолжаю получать OverwriteModelError? - PullRequest
1 голос
/ 13 января 2020

При запуске сервера появляется следующая ошибка:

throw new _mon goose .Error.OverwriteModelError (name); ^ OverwriteModelError: Невозможно перезаписать User модель после компиляции. в новом OverwriteModelError (/home/pranav/exercise-tracker/mern-exercise-tracker/backend/node_modules/mongoose/lib/error/overwriteModel.js:20:11)

my user.model. js file

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const userSchema = new Schema(
  {
    username: {
      type: String,
      required: true,
      unique: true,
      trim: true,
      minlength: 3
    }
  },
  {
    timestamps: true
  }
);

const User = mongoose.model("User", userSchema);
module.exports = User;

Мои пользователи. js

const router = require("express").Router();
let User = require("../models/user.model");

router.route("/").get((req, res) => {
  User.find()
    .then(users => res.json(users))
    .catch(err => res.status(400).json("Error: " + err));
});

router.route("/add").post((req, res) => {
  const username = req.body.username;
  const newUser = new User({ username });

  newUser
    .save()
    .then(() => res.json("User added!"))
    .catch(err => res.status(400).json("Error: " + err));
});

module.exports = router;

server. js

const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');

require('dotenv').config();

const app = express();
const port = process.env.PORT || 5000;
app.use(cors);
app.use(express.json());
const uri = process.env.ATLAS_URI;

mongoose.connect(uri, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true });
const connection = mongoose.connection;

connection.once('open', () => {
    console.log("MongoDB connection established");
})

const exercisesRouter = require('./routes/exercises');
const usersRouter = require('./routes/users');

app.use('/exercises', exercisesRouter);
app.use('/users', usersRouter);

app.listen(port, () => {
    console.log('Server is running on port : ' + port);
})

1 Ответ

1 голос
/ 16 февраля 2020

Замените

const User = mongoose.model("User", userSchema);

на

const User = mongoose.models['User'] || mongoose.model("User", userSchema);

Когда ваш код работает, user.model.js, вероятно, вызывается снова, таким образом вызывая начальное определение.

Примечание модель s используется в операционной. Этот метод возвращает объект, содержащий все определенные модели. Его также можно записать как mongoose.models.User.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...