2012-04-14 91 views
23
var mongo = require('mongoose'); 
var connection = mongo.createConnection('mongodb://127.0.0.1/test'); 

connection.on("error", function(errorObject){ 
    console.log(errorObject); 
    console.log('ONERROR'); 
}); 

var Schema = mongo.Schema; 
var BookSchema = new Schema({ title : {type : String, index : {unique : true}}}); 
var BookModel = mongo.model('abook', BookSchema); 
var b = new BookModel({title : 'aaaaaa'}); 

b.save(function(e){ 
    if(e){ 
    console.log('error') 
    }else{ 
    console.log('no error') 
}}); 

'error'或'no error'都不會打印到終端。更重要的是,connection.on'錯誤'似乎也不會觸發。我已經確認MongoDb正在運行。Mongoose.js instance.save()callback not firing

回答

60

這是一種情況,您將模型添加到全局貓鼬對象,但打開模型不屬於的單獨連接mongo.createConnection()。由於模型沒有連接,因此無法保存到數據庫。

var connection = mongo.createConnection('mongodb://127.0.0.1/test'); 
// becomes 
var connection = mongo.connect('mongodb://127.0.0.1/test'); 

或者添加您的模型到你的單獨的連接:

var BookModel = mongo.model('abook', BookSchema); 
// becomes 
var BookModel = connection.model('abook', BookSchema); 
+0

感謝@aaronheckmann! – LDK 2012-04-23 22:05:31

+2

謝謝,向mongoosejs.com的教程提交了一個修復程序。 – 2013-05-18 22:51:41

+0

@aaronheckmann,當將'mongo.model'更改爲'connection.model'我得到'TypeError:未定義的類型'paths.login'您嘗試嵌套架構嗎?你只能使用參考或數組嵌套.' – 2014-03-28 12:32:04

0

張貼的答案不能解決問題

這是通過連接到蒙戈全球貓鼬連接上解決。不幸的是,我不能只升級我的數據庫,所以對我來說這不是一個解決方案。但在這裏我找到了解決這個問題:https://github.com/Automattic/mongoose/issues/4064

只需使用.$__save代替.save如圖所示:

var b = new BookModel({title : 'aaaaaa'}); 

b.$__save({}, function(e){ 
    if(e){ 
    console.log('error') 
    // callback will show if e exists 
    }else{ 
    console.log('no error') 
    // callback will show 'no error' 
}});