Javascript 在try-catch块上是否会与mongoose.save()抛出的错误对象发生冲突?

Javascript 在try-catch块上是否会与mongoose.save()抛出的错误对象发生冲突?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,考虑以下代码: mongoose.connect('MyDatabaseURL'); var sch_obj = {field1: String}; var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { var model_obj = db.model('SchemaName', sch_obj

考虑以下代码:

mongoose.connect('MyDatabaseURL');
var sch_obj = {field1: String};
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
    var model_obj = db.model('SchemaName', sch_obj);
    var obj = new model_obj({field1:'MyValue'});
    obj.save(function(err,data){
      if(err) 
         console.log('error occurred:' + err);   // <=== Case 1
      else
         console.log('saved'); 
      });
});

/* ----------------------------------  */

mongoose.connect('MyDatabaseURL');
var sch_obj = {field1: String};
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
    var model_obj = db.model('SchemaName', sch_obj);
    var obj = new model_obj({field1:'MyValue'});
    obj.save(function(err,data){
      try {
          console.log('saved');
      }
      catch(err)                            // <=== Case 2
      {
        console.log('error occurred:' + err);
      }
    });
});
mongoose.connect('MyDatabaseURL');
var schu_obj={field1:String};
var db=猫鼬连接;
db.on('error',console.error.bind(console,'connectionerror:');
db.once('open',function(){
var model_obj=db.model('SchemaName',schu obj);
var obj=新模型_obj({field1:'MyValue'});
对象保存(功能(错误、数据){
如果(错误)

console.log('错误发生:'+err);//不,它们不一样。Mongoose newer抛出错误,因此您将捕获一个。这就是为什么您不能使用
try…catch…
语句来处理Mongoose错误

因此,唯一正确的方法是:

obj.save(function(err,data){
  if(err)
     console.log('error occurred:' + err);
  else
     // err == null
     console.log('saved'); 
  });
其背后的原因是
throw
会终止当前进程,除非它被捕获。因此,大多数nodejs模块(例如
express
mongoose
等)使用回调传递错误,而不是抛出错误,这在nodejs中是一种常见的做法。

@AmolMKulkarni,有关正确错误处理的更多示例,请参阅。