为啥我不断收到 OverwriteModelError?

Posted

技术标签:

【中文标题】为啥我不断收到 OverwriteModelError?【英文标题】:why do i keep getting OverwriteModelError?为什么我不断收到 OverwriteModelError? 【发布时间】:2020-04-30 04:02:44 【问题描述】:

启动服务器时出现以下错误:

抛出新的 _mongoose.Error.OverwriteModelError(name); ^ OverwriteModelError: 编译后无法覆盖User 模型。 在新的 OverwriteModelError (/home/pranav/exercise-tracker/mern-exercise-tracker/backend/node_modules/mongoose/lib/error/overwriteModel.js:20:11)

我的 user.model.js 文件

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;

我的 users.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);
)

【问题讨论】:

这能回答你的问题吗? Cannot overwrite model once compiled Mongoose 【参考方案1】:

替换

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

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

当您的代码运行时,user.model.js 可能会再次被调用,从而调用初始定义。

注意 OR 中使用的模型s。该方法返回一个包含所有已定义模型的对象。也可以写成mongoose.models.User

【讨论】:

以上是关于为啥我不断收到 OverwriteModelError?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不断收到交互失败 (discord.py)

为啥我不断收到“java.net.MalformedURLException:无协议”[重复]

为啥我不断收到这个受诅咒的 SQL*Plus 无效标识符错误?

为啥我不断收到“SVN:工作副本 XXXX 锁定;尝试执行“清理”?

为啥我在地图箭头功能中不断收到未定义的错误?

Wavefront OBJ Parsing - 为啥我不断收到不正确的数据作为输出?