아래의 코드를 살펴보면 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');
});
});