为啥我不断收到 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?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不断收到“java.net.MalformedURLException:无协议”[重复]
为啥我不断收到这个受诅咒的 SQL*Plus 无效标识符错误?