¿Mongoose.js Swallows errores en la devolución de llamada guardada?
Pregunta
Aquí hay un ejemplo aislado del problema:
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")
})
Cualquier error lanzado dentro de la devolución de llamada Guardar no produce salida en la consola. La ejecución parece detenerse en esa línea.
¿Por qué pasó esto?
¿Hay una mejor manera de escribir devoluciones de llamada, tal vez usando una promesa?
Solución
Puedes usar el objeto de conexión error evento:
var connection = mongoose.createConnection('mongodb://127.0.0.1/test'),
BlogPost = connection.model('BlogPost', BlogPostSchema);
connection.on("error", function(errorObject){
console.log(errorObject);
...
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow