2017-07-17 3 views
2

ich diese Störung erhalte, während mein Code kompilierenKann nicht überschrieben `Benutzer` Modell einmal kompiliert Knoten js

throw new mongoose.Error.OverwriteModelError(name); 
    ^
OverwriteModelError: Cannot overwrite `users` model once compiled. 

Das ist mein Modell ist/users.js

const mongoose = require('mongoose'); 
const bcrypt = require('bcryptjs'); 
const config = require('../config/database'); 

//User Schema 
const UserSchema = mongoose.Schema({ 
    name: { 
    type:String 
    }, 
    email: { 
    type:String, 
    required:true 
    }, 
    username: { 
    type:String, 
    required:true 
    }, 
    password: { 
    type:String, 
    required:true 
    } 
}); 

const users = module.exports = mongoose.model('users',UserSchema); 

module.exports.getUserById = function(id,callback) 
{ 
    User.findById(id,callback); 
} 

module.exports.getUserByUsername = function(username,callback){ 
    const query = {username: username} 
    user.findOne(query,callback); 
} 
module.exports.addUser = function(newUser,callback){ 
    bcrypt.genSalt(10,(err,salt)=>{ 
    if(err) 
    { 
     throw err; 
    } 
    bcrypt.hash(newUser.password,salt,(err,hash)=>{ 
     newUser.password=hash; 
     newUser.save(callback); 
    }); 
    }); 
} 

Datei Dies ist mein Weg/users.js Datei

const express = require('express'); 
const router = express.Router(); 
const passport = require('passport'); 
const jwt = require('jsonwebtoken'); 
var Log = require('log') 
    , log = new Log('info'); 

const User = require('../Model/users'); 
//const ap = express(); 

//Register router 
router.post('/register',(req,res,next)=>{ 
    log.info('entering register'); 
    let newUser = new User({ 
    name:req.body.name, 
    email:req.body.email, 
    username:req.body.username, 
    password:req.body.password 
    }); 
    User.addUser(newUser,(err,user)=>{ 
    log.info("inside add user"); 
    if(err){ 
     log.error('error while registaring ' + err); 
     res.json({success:false,msg:'failed to register user'}); 
    } 
    else { 
     res.json({sucess:true,msg:'user registered succefully'}); 
    } 
    }) 
}); 
router.get('/authenticate',(req,res,next)=>{ 
    res.send("authenticated"); 
}); 
router.get('/profile',(req,res,next)=>{ 
    res.send('profile'); 
}); 
module.exports=router; 

passport.js

const JwtStrategy = require('passport-jwt').Strategy; 
const ExtractJwt = require('passport-jwt').ExtractJwt; 
const User = require('../model/users'); 
const config = require('../config/database'); 

module.exports = function(passport){ 
    let opts = {}; 
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); 
    opts.secretOrKey = config.secret; 
    passport.use(new JwtStrategy(opts,(jwt_payload,done)=>{ 
    User.getUserById(jwt_payload._id,(err,user)=>{ 
     if(err) 
     { 
     return done(err,false); 
     } 
     if(user){ 
     return done(null,user); 
     } 
     else { 
     return done(null,false); 
     } 
    }) 
    })); 
} 

Ich habe einen Vorschlag aus [Cannot overwrite model once compiled Mongoose versucht, aber ich bin nicht in der Lage zu verstehen, was das Problem ist.

Antwort

1

Aktualisieren Sie Ihre require-Anweisungen so, dass sie sowohl in den Routen als auch in der Passportatei konsistent sind: const User = require('../model/users');. Fall ist wichtig!

Es sieht so aus, als ob Sie nicht die korrekte Mungo-Terminologie verwenden. Basierend auf their documentation sollte dies grob wie folgt implementiert werden.

const mongoose = require('mongoose'); 
const bcrypt = require('bcryptjs'); 
const config = require('../config/database'); 

//User Schema 
const UserSchema = mongoose.Schema({ 
    name: { 
    type:String 
    }, 
    email: { 
    type:String, 
    required:true 
    }, 
    username: { 
    type:String, 
    required:true 
    }, 
    password: { 
    type:String, 
    required:true 
    } 
}); 

UserSchema.statics.getUserById = function(id,callback) 
{ 
    return this.findById(id,callback); 
}; 

UserSchema.statics.getUserByUsername = function(username,callback){ 
    const query = {username: username} 
    return this.findOne(query,callback); 
}; 
UserSchema.statics.addUser = function(newUser,callback){ 
    bcrypt.genSalt(10,(err,salt)=>{ 
    if(err) 
    { 
     throw err; 
    } 
    bcrypt.hash(newUser.password,salt,(err,hash)=>{ 
     newUser.password=hash; 
     newUser.save(callback); 
    }); 
    }); 
}; 

module.exports = users = mongoose.model('users',UserSchema);; 
+0

Es funktioniert nicht :( – user3649361

+0

Ich habe meine Antwort bearbeitet. Versuchen Sie es erneut. – SimplyComplexable

+0

immer noch nicht funktioniert, sind Sie Kann ich es mit Ihrem Code ausführen? – user3649361

0

Gestalten Sie Ihr Schema mit einigen Optionen

//User Schema 
const UserSchema = mongoose.Schema({ 
    name: { 
    type:String 
    }, 
    email: { 
    type:String, 
    required:true 
    }, 
    username: { 
    type:String, 
    required:true 
    }, 
    password: { 
    type:String, 
    required:true 
    } 
}, {strict: false}); 

const users = module.exports = mongoose.model('users',UserSchema); 

{strict: false} ist für Zukunft! Wie? Jetzt hat Ihr Schema 10 Felder, wenn Sie in Zukunft ein Objekt mit 12 (etwas mehr als 10) hinzufügen möchten, können Sie das tun, weil es keine Strenge gibt, Objekte mit diesen 10 Feldern einzufügen. Auch wenn weniger Felder.

Kann dies Ihr Problem lösen kann

+0

Es funktioniert nicht :( – user3649361

0

ich auf die Frage äußern kann nicht so die Informationen setzen ich denke auflösen kann hier.

höchstwahrscheinlich kann das Problem auf route/user.js

Datei sein
const User = require('../Model/users'); 

, in dem Sie das Schema für Benutzer erstellen,

und wenn Sie

let newUser = new User({ 
    name:req.body.name, 
    email:req.body.email, 
    username:req.body.username, 
    password:req.body.password 
}); 

es versucht, eine andere auf erstellen Spitze davon.

Auch in model/users.js

module.exports.getUserByUsername = function(username,callback){ 
    const query = {username: username} 
    user.findOne(query,callback); 
} 

oben user undefined zu sein scheint