如何解决:MongooseError [OverwriteModelError]:编译后无法覆盖“用户”模型。(MERN堆栈)?

时间:2019-09-11 17:23:09

标签: javascript node.js mongodb express mongoose

我是MERN堆栈的入门者,我试图从youtube教程构建一个运动追踪器应用。当我运行服务器时,我不知道是什么给了我Mongoose:OverwriteModelError,看看我在哪里覆盖用户模型。有人可以在这里指出导致错误的代码吗?

我已经在网上搜索了很多,但是找不到导致代码错误的原因

models / user.model.js

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

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

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

routes / 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('Database connection established successfully');
})


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


这是我收到的错误消息

MongooseError [OverwriteModelError]: Cannot overwrite `User` model once compiled.
    at new OverwriteModelError (C:\Users\Josu\Desktop\Exercise Tracker\mern-exercise-tracker\backend\node_modules\?[4mmongoose?[24m\lib\error\overwriteModel.js:20:11)
    at Mongoose.model (C:\Users\Josu\Desktop\Exercise Tracker\mern-exercise-tracker\backend\node_modules\?[4mmongoose?[24m\lib\index.js:512:13)
    at Object.<anonymous> (C:\Users\Josu\Desktop\Exercise Tracker\mern-exercise-tracker\backend\models\user.model.js:18:23)
?[90m    at Module._compile (internal/modules/cjs/loader.js:777:30)?[39m
?[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:788:10)?[39m
?[90m    at Module.load (internal/modules/cjs/loader.js:643:32)?[39m
?[90m    at Function.Module._load (internal/modules/cjs/loader.js:556:12)?[39m
?[90m    at Module.require (internal/modules/cjs/loader.js:683:19)?[39m
?[90m    at require (internal/modules/cjs/helpers.js:16:16)?[39m
    at Object.<anonymous> (C:\Users\Josu\Desktop\Exercise Tracker\mern-exercise-tracker\backend\routes\users.js:2:12)
?[90m    at Module._compile (internal/modules/cjs/loader.js:777:30)?[39m
?[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:788:10)?[39m
?[90m    at Module.load (internal/modules/cjs/loader.js:643:32)?[39m
?[90m    at Function.Module._load (internal/modules/cjs/loader.js:556:12)?[39m
?[90m    at Module.require (internal/modules/cjs/loader.js:683:19)?[39m
?[90m    at require (internal/modules/cjs/helpers.js:16:16)?[39m {
  message: ?[32m'Cannot overwrite `User` model once compiled.'?[39m,
  name: ?[32m'OverwriteModelError'?[39m
}
[nodemon] app crashed - waiting for file changes before starting...

1 个答案:

答案 0 :(得分:0)

我认为您已经在 ./ models / exercise.model.js

中定义了相同的架构

可以共享两个模型架构吗?