2013-08-20 5 views
-1

아래의 코드를 살펴보면 try/catch 블록이 "Route Error"를 잡는 것이 어떻게 가능합니까? 나의 이해는 '/'라우트에 등록 된 콜백이 메인 이벤트 루프에서 실행된다는 것인데, 콜백이 실행되는 콜 스택의 일부가 아니기 때문에 예외는 지정된 try/catch 블록에 의해 캐치 될 수 없다.Express, Node error control flow

var express = require('express') ; 
var app = express(); 
var http = require('http'); 

var mongod = require('mongodb'); 

var server_conf = new mongod.Server('localhost', 27017, {auto_reconnect:true}); 

//dummy logger 
var logger = { 
    error:function(message, object) {console.log('anything')}, 
    log:function(message, object) {console.log('anything')}, 
    debug:function(message, object) {console.log('anything')}} 

var db_container = {db: new mongod.Db('test', server_conf, 
    {w:1, 
     journal:true, native_parser:true, logger: logger})} 

app.use(express.bodyParser()); 
app.use(app.router); 

db_container.db.open(function(err, index_info){ 

    if(err) throw err; 
    var testcol = db_container.db.collection('testcol'); 
    try{ 
     app.get('/', function(request, res){ 
      throw new Error("Route Error"); 
      testcol.insert({hello:"moto"}, function(err,doc){ 

       if(err){ 
        throw err; 
       } 
       testcol.find({}).toArray(function(err,docs){ 
        res.send(docs); 
       }); 
      }); 

     }); 
    } 
    catch(e){ 
     res.send("err caught "+ e); 
    } 
    http.createServer(app).listen(3000, function() { 
     console.log('Express server listening on port ' + '3000'); 
    }); 
}); 

관련 "다음과 같은"오류 메시지 "오류로 인해 노드 응용 프로그램이 손상되지 않는 이유는 무엇입니까? 이 오류가 발생하는 모든 기능이 메인 이벤트 루프에서 실행되고 있으므로 캐치되지 않는 예외가 발생하여 앱을 중단해야합니다.

var express = require('express') ; 
var app = express(); 
var http = require('http'); 

var mongod = require('mongodb'); 

var server_conf = new mongod.Server('localhost', 27017, {auto_reconnect:true}); 

//dummy logger 
var logger = { 
    error:function(message, object) {console.log('anything')}, 
    log:function(message, object) {console.log('anything')}, 
    debug:function(message, object) {console.log('anything')}} 

var db_container = {db: new mongod.Db('test', server_conf, 
    {w:1, 
     journal:true, native_parser:true, logger: logger})} 

app.use(express.bodyParser()); 
app.use(app.router); 

db_container.db.open(function(err, index_info){ 

    if(err) throw err; 
    var testcol = db_container.db.collection('testcol'); 
    try{ 
     app.get('/', function(request, res){ 

      testcol.insert({hello:"moto"}, function(err,doc){ 
       throw new Error("Crash Me"); 

       if(err){ 
        throw err; 
       } 
       testcol.find({}).toArray(function(err,docs){ 
        res.send(docs); 
       }); 
      }); 

     }); 
    } 
    catch(e){ 
     res.send("err caught "+ e); 
    } 
    http.createServer(app).listen(3000, function() { 
     console.log('Express server listening on port ' + '3000'); 
    }); 
}); 

답변

0

... 네이티브 몽고 드라이버를 snuffing 조용히 오류를 끄는 경우를 제외하고 질문의 첫 번째 부분에 대한 대답은 두 번째 부분에 관해서는 here

이다, 문제는 열려 있지만 일부는 노드 - mongodb - 네이티브가 던져진 예외를 자동으로 snuffing하려고 시도하기 때문이라고 생각합니다.

노드 - mongodb- 네이티브 그룹 here

에서 관련된 모든 응답을 찾을 수 있습니다.
관련 문제