2011-10-18 9 views
5

Ecco un esempio isolato del problema:Mongoose.js ingerisce errori nel salvataggio del callback?

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

mongoose.connect("mongodb://localhost/some_db"); 

var BlogPostSchema = new Schema({ 
    title  : String 
    , body  : String 
    , date  : Date 
}); 

var BlogPost = mongoose.model('BlogPost', BlogPostSchema); 

var bp = new BlogPost({title: 'blogpost 0'}) 
bp.save(function(err) { 
    console.log("this will print 0") 
    assert.equal(1, 1) 
    console.log("0 ... no problem") 
}) 

var bp1 = new BlogPost({title: 'blogpost 1'}) 
bp1.save(function(err) { 
    console.log("this will print 1") 
    assert.equal(1, 2) 
    console.log("this will NOT print") 
}) 

var bp2 = new BlogPost({title: 'blogpost 2'}) 
bp2.save(function(err) { 
    console.log("this will print 2") 
    throw "this error is swallowed" 
    console.log("this will NOT print") 
}) 

Qualsiasi errore gettato all'interno del callback salvare produce alcuna uscita nella console. L'esecuzione sembra fermarsi a quella linea.

Perché succede?

C'è un modo migliore per scrivere i callback, magari usando una Promessa?

+0

ha aperto un caso per questo problema come il fissaggio al evento di errore non ha alcun effetto sugli errori di callback: https://github.com/Automattic/mongoose/issues/3273 – BrutalDev

risposta

5

È possibile utilizzare oggetto di connessione errore evento:

var connection = mongoose.createConnection('mongodb://127.0.0.1/test'), 
    BlogPost = connection.model('BlogPost', BlogPostSchema); 

connection.on("error", function(errorObject){ 
    console.log(errorObject); 
    ... 
}); 
+1

Ancora non funziona, gli errori sono ancora in deglutizione e il lancio nel terzo salvataggio non ha alcun effetto, nulla di diverso viene stampato sulla console. Sto ancora indagando su questo. – BrutalDev

Problemi correlati