Node.js 一旦编译,就无法覆盖'User'模型。解决后,我得到';用户';未定义
我目前正在一个购物网站的后端工作, 在处理我的post功能时。我得到这个错误 “OverwriteModeError:编译后无法覆盖Node.js 一旦编译,就无法覆盖'User'模型。解决后,我得到';用户';未定义,node.js,mongodb,express,mongoose,mongoose-schema,Node.js,Mongodb,Express,Mongoose,Mongoose Schema,我目前正在一个购物网站的后端工作, 在处理我的post功能时。我得到这个错误 “OverwriteModeError:编译后无法覆盖用户模型。” 一切都很好,直到我选择buy角色时,它需要对用户和角色进行搜索查询,并将角色推入用户模型中的数组ownedCharacter。 当我删除const User=require('../Model/User')并测试postman中的函数buy character,它表示用户未定义 下面是模型的代码 const mongoose = require('mo
用户
模型。”
一切都很好,直到我选择buy角色时,它需要对用户和角色进行搜索查询,并将角色推入用户模型中的数组ownedCharacter。
当我删除const User=require('../Model/User')
并测试postman中的函数buy character,它表示用户未定义
下面是模型的代码
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
username:{
type: String,
required : true
},
email:{
type: String,
required: true
},
password:{
type: String,
required: true,
min: 8
},
status:{
type:Boolean,
default:false
},
points:{
type:Number,
default: 0
},
rank:{
type:String,
default:"unranked"
},
avatar:{
type:String,
default:""
},
level:{
type:Number,
default:0
},
experience:{
type:Number,
default:0
},
registrationDate:{
type:Date,
default:Date.now()
},
gold:{
type:Number,
default:0
},
gems:{
type:Number,
default:0
},
ownedCharacter:[{
type:mongoose.Schema.Types.ObjectId,
ref:"Character",
}],
},{timestamps:true});
module.exports = mongoose.model("User", UserSchema);
下面是app.js的代码
const express = require('express');
const app = express();
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(express.static('uploads'));
//Import Routes
const authRoute = require ('./Route/Auth');
const authAdminRoute = require ('./Route/Admin_Auth');
const shopRoute = require('./Route/Shop');
dotenv.config();
//Connection to DataBase
mongoose.connect(
process.env.DB_CONNECT,
{useNewUrlParser: true, useUnifiedTopology: true},
()=>console.log('connected to database')
);
//MiddleWares
app.use(express.json());
//Route MiddleWares
app.use('/api/user', authRoute);
app.use('/api/admin', authAdminRoute);
app.use('/api/shop',shopRoute);
//Server Listener
app.listen(27017, ()=> console.log("Server Running"));
这是商店的路线
const router = require('express').Router();
const User = require('../Model/User');
const Character = require('../Model/Character');
const Skin = require('../Model/Skin');
//admin add character
router.post('/addCharacter', async (req, res) =>{
const character = new Character({
name:req.body.name,
price:req.body.price,
story:req.body.story,
ability:{
abilityName:req.body.abilityName,
cooldown:req.body.cooldown,
description:req.body.description
},
});
try {
const savedCharacter = await character.save();
res.json({savedCharacter});
console.log(character);
} catch (error) {
}
});
//add Skin
router.post('/addSkin/:characterId', async (req, res) =>{
const skin = new Skin({
name:req.body.name,
price:req.body.price,
description:req.body.description,
characterId: req.params.characterId
});
try {
const savedSkin = await skin.save();
res.json({skin});
console.log(skin);
} catch (error) {
}
});
//add Monsters
router.post('/addMonster/', async (req, res) =>{
const mosnter = new Monster({
name:req.body.name,
price:req.body.price,
description:req.body.description,
});
try {
const savedMonster = await monster.save();
res.json({monster});
console.log(monster);
} catch (error) {
}
});
//add Traps
router.post('/addTrap', async (req, res) =>{
const trap = new Trap({
name:req.body.name,
price:req.body.price,
description:req.body.description,
});
try {
const savedTrap = await trap.save();
res.json({trap});
console.log(trap);
} catch (error) {
}
});
//buy a Character
router.post('/buyCharacter/:characterId/:userId',async(req,res)=>{
try {
const user = await User.findOne({_id:req.params.userId});
console.log("user:"+user);
const boughtCharacter = await Character.findOne({_id:req.params.characterId});
user.ownedCharacter.push(boughtCharacter);
user.save();
res.json(boughtCharacter);
console.log(boughtCharacter);
} catch (error) {
console.log(error.message);
}
});
module.exports = router;
require语句和文件名之间的大小写是否正确匹配?如果文件名实际上是/Model/user.js,它可能会抛出此错误。错误消息告诉您,不知何故,您多次声明了名为
user
的模型。除非您在另一个文件中再次显式地执行此操作,否则最好的办法是将User.js
文件加载两次。出现这种情况的原因有很多,但最可能的原因是您在多个位置导入了。/Model/User.js
文件,但大小写不一致
当节点加载导入时,它将使用传递给require()
…的解析文件名对其进行缓存。。。它是以区分大小写的方式进行的。这意味着,如果在一个文件中有require(../Model/user)
,在另一个文件中有require(../Model/user)
另一方面,节点将加载同一文件两次,从而执行文件两次,从而尝试在共享的mongoose
实例上设置名为User
的模型两次,从而为您提供所遇到的overwriteModeError
我会在您的IDE中查找并查看您需要该模型的任何地方