Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 一旦编译,就无法覆盖'User'模型。解决后,我得到';用户';未定义_Node.js_Mongodb_Express_Mongoose_Mongoose Schema - Fatal编程技术网

Node.js 一旦编译,就无法覆盖'User'模型。解决后,我得到';用户';未定义

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

我目前正在一个购物网站的后端工作, 在处理我的post功能时。我得到这个错误 “OverwriteModeError:编译后无法覆盖
用户
模型。” 一切都很好,直到我选择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中查找并查看您需要该模型的任何地方