一旦编译节点js,不能覆盖`用户`模型

编译我的代码时出现此错误

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

这是我的Model / 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); }); }); } 

这是我的路线/ users.js文件

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

我已经尝试了[ 一旦编译Mongoose不能覆盖模型,但我不能理解问题是什么。

更新您的require语句,使其在路由和护照文件中保持一致: const User = require('../model/users'); 。 案件确实重要!

看起来你没有使用正确的mongoose术语。 根据他们的文件 ,这应该大致如下实施。

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

用一些选项devise你的模式

 //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}是未来的! 怎么样? 现在你的模式有10个字段,如果将来你想要添加一个有12个(超过10个)的对象,你可以这样做,因为没有严格的插入这10个字段的对象。 即使less田。

可能是这个可能会解决你的问题

我不能评论这个问题,所以把我认为可以解决的信息在这里。

最有可能的问题可以在route/user.js文件

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

在其中您正在为用户创build架构,

当你

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

它试图在它之上创build另一个。

还在model/users.js

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

上面的user似乎是未定义的