2017-06-17 31 views
0

这种使用db.model('Model_Name').find(...)工作过,但我已经分开我的数据库,模型和控制器,所以现在看来​​我需要改变的东西请帮助显示我要去哪里错了:如何模仿我的猫鼬设置

schema.js

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

var UsersSchema = new Schema({ 
    display_name   : String, 
    email     : String 
}); 

var ClientErrorsSchema = new Schema({ 
    datetime  : Number, 
    msg   : String, 
    url   : String, 
    line   : Number 
}); 

var users = mongoose.model('Users',UsersSchema); 
var client_errors = mongoose.model('Client_Errors',ClientErrorsSchema); 

module.exports = mongoose.model; 

db.js

var mongoose = require('mongoose'); 
var model = require("./schema.js"); 

var MONGO = { 
    username: "admin", 
    password: "***", 
    server: 'localhost', 
    port: '*****', 
    db: 'db_name', 
    connectionString: function(){ 
     return 'mongodb://'+this.username+':'+this.password+'@'+this.server+'/'+this.db; 
    }, 
    options: { 
     server:{ 
      auto_reconnect: true, 
      poolSize: 20, 
      socketOptions:{ 
       keepAlive: 1 
      } 
     }, 
     db: { 
      numberOfRetries: 10, 
      retryMiliSeconds: 1000 
     } 
    } 
}; 

var db = mongoose.createConnection(MONGO.connectionString(), MONGO.options); 

db.model = model; 

db.on('error', function(err) { 
    f.consoleLogger("DB connection Error: "+err); 
}); 
db.on('open', function() { 
    f.consoleLogger("DB connected"); 
}); 
db.on('close', function(str) { 
    f.consoleLogger("DB disconnected: "+str); 
}); 

module.exports = db; 

user.js的

var db = require("./db.js"); 
... 
db.model('Users').find(...) 

因此,使用util.inspect,我可以看到数据库拥有所有的车型,但我发现在发现错误TypeError: Cannot read property 'User' of undefined'

UPDATE

Toad22222提供非常好的建议和模式似乎是有效的 - 但查询不工作 - 无论db.model.Users.find({...},function(err,data){...});db.model.Users.find({...}).exec(function(err,data){...});火灾回调。我在on('open')事件中也放了相同的代码,没有任何反应。希望有人能解释为什么。

所有建议表示赞赏!

+0

由于您正在导出'module.exports = mongoose.model;'然后在user.js中您应该使用'db('users')。find ...' – Molda

回答

1

尝试走出

module.exports = { 
    User: users, 
    ClientErrors: client_errors 
} 

代替

module.exports = mongoose.model; 

你想被出口正在创建的模式,而不是mongoose.model数据类型。

+0

干杯蟾蜍,这似乎现在又回来了正确的轨道,你是对的。然而,现在仍有一个问题。对象'db.model.User'似乎是有效的,但是使用'db.model.User.find(...).exec(function(err,data){...})'似乎不会触发回调,任何想法为什么? – Jester

+1

它现在似乎是固定的 - 我已经颠倒了加载的顺序,所以'db.js'只运行'connect'并将结果对象导出到'schema.js' - 和'user.js'中加载'schema.js'。快乐的时光! – Jester