2016-02-24 75 views
1

當我在我使用它們的同一個文件中定義我的模式和模型時,一切正常。貓鼬引入模型將不起作用

不過,如果我輸入他們就像我看到所有的例子在淨進口他們:這樣的...

index.js

var mongoose = require('mongoose'); 
var User = require('./../models/user'); 

mongoose.connect('mongodb://localhost/demo_database', function(){ 
    var user = new User({...}); 
}); 

user.js的

var mongoose = require('mongoose'); 

var UserSch = new mongoose.Schema({ 
    ... 
}); 

module.exports = mongoose.model('user', UserSch); 

...那麼我在index.js中用戶的任何實例上運行的任何函數都會掛起。

我已經通過將貓鼬變量user.js的像這樣圍繞這個工作...

index.js

var mongoose = require('mongoose'); 
var User = require('./../models/user')(mongoose); 

mongoose.connect('mongodb://localhost/demo_database', function(){ 
    var user = new User({...}); 
}); 

user.js的

module.exports = function(mongoose) { 

    var UserSch = new mongoose.Schema({ 
     ... 
    }); 

    return mongoose.model('user', UserSch); 
} 

爲什麼我必須這麼做,而所有我見過的例子都不這樣做?

謝謝!

附加信息

如果我提出user.js的到同一文件夾中index.js並做var User = require('./user'),一切正常。

+0

首先,你需要連接貓鼬!看看我的例子:https://github.com/Talento90/ima-up/ –

+0

@MarcoTalento我是,我只是簡單地離開這篇文章。就像我說的那樣,它的全部都在同一個文件中。當模型導入時,我可以在mongodb日誌中看到連接,但.find或.save回調從不會被調用,並且腳本會掛起。 –

+0

@MarcoTalento我編輯帖子以顯示我打電話的地方mongoose.connect() –

回答

0

試試這個代碼!

index.js

var mongoose = require('mongoose'); 
mongoose .connect(connectionString) 
var mongoDb = mongoose.connection 

mongoDb.on('error',() => { 
    server.log('error', `Unable to connect to database: ${config.database.connectionString}`) 
}) 

mongoDb.once('open',() => { 
    server.log('info', `Connected to database: ${config.database.connectionString}`) 
}) 


// Load all Mongoose models 
require('./../models/user'); 

//Using Model 
var userModel = mongoose.model('user'); 

userModel.findOne({ _id: "id..." }) 

user.js的

var mongoose = require('mongoose'); 

var UserSch = new mongoose.Schema({ 
    ... 
}); 

module.exports = mongoose.model('user', UserSch); 
+0

所以基本上你在這裏做的是在模型被導入到index.js之前移動連接發生? –