编译 Mongoose 后无法覆盖模型

新手上路,请多包涵

不确定我做错了什么,这是我的 check.js

 var db = mongoose.createConnection('localhost', 'event-db');
db.on('error', console.error.bind(console, 'connection error:'));

var a1= db.once('open',function(){
var user = mongoose.model('users',{
       name:String,
       email:String,
       password:String,
       phone:Number,
      _enabled:Boolean
     });

user.find({},{},function (err, users) {
    mongoose.connection.close();
    console.log("Username supplied"+username);
    //doSomethingHere })
    });

这是我的 insert.js

 var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/event-db')

var user = mongoose.model('users',{
     name:String,
     email:String,
     password: String,
     phone:Number,
     _enabled:Boolean
   });

var new_user = new user({
     name:req.body.name,
     email: req.body.email,
     password: req.body.password,
     phone: req.body.phone,
     _enabled:false
   });

new_user.save(function(err){
    if(err) console.log(err);
   });

每当我尝试运行 check.js 时,都会收到此错误

编译后无法覆盖“用户”模型

我知道这个错误是由于 Schema 不匹配造成的,但我看不到这是在哪里发生的?我对猫鼬和 nodeJS 很陌生。

这是我从 MongoDB 的客户端界面得到的信息:

 MongoDB shell version: 2.4.6 connecting to: test
> use event-db
  switched to db event-db
> db.users.find()
  { "_id" : ObjectId("52457d8718f83293205aaa95"),
    "name" : "MyName",
    "email" : "myemail@me.com",
    "password" : "myPassword",
    "phone" : 900001123,
    "_enable" : true
  }
>

原文由 Anathema.Imbued 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 749
2 个回答

发生错误是因为您已经定义了架构,然后您再次定义架构。通常你应该做的是将模式实例化一次,然后让一个全局对象在需要时调用它。

例如:

user_model.js

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

var userSchema = new Schema({
   name:String,
   email:String,
   password:String,
   phone:Number,
   _enabled:Boolean
});
module.exports = mongoose.model('users', userSchema);

检查.js

 var mongoose = require('mongoose');
var User = require('./user_model.js');

var db = mongoose.createConnection('localhost', 'event-db');
db.on('error', console.error.bind(console, 'connection error:'));
var a1= db.once('open',function(){
  User.find({},{},function (err, users) {
    mongoose.connection.close();
    console.log("Username supplied"+username);
    //doSomethingHere
  })
});

插入.js

 var mongoose = require('mongoose');
var User = require('./user_model.js');

mongoose.connect('mongodb://localhost/event-db');
var new_user = new User({
    name:req.body.name
  , email: req.body.email
  , password: req.body.password
  , phone: req.body.phone
  , _enabled:false
});
new_user.save(function(err){
  if(err) console.log(err);
});

原文由 thtsigma 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可能会收到此错误的另一个原因是,如果您在不同的文件中使用相同的模型,但您的 require 路径有不同的大小写。

例如,在我的情况下,我有 require('./models/User') 在一个文件中,然后在另一个我需要访问用户模型的文件中,我有 require('./models/user')

我猜模块和猫鼬的查找将其视为不同的文件。一旦我确定两者的情况都匹配,它就不再是问题了。

原文由 jonnie 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题