Рассматривая приведенный ниже код, как возможно, что блок try/catch захватывает «Ошибка маршрута»? Я понимаю, что обратный вызов, зарегистрированный на маршруте '/', выполняется в цикле основного события и, таким образом, исключение не может быть захвачено указанным блоком try/catch, потому что он не является частью стека вызовов, где выполняется обратный вызов.Экспресс, поток управления ошибкой узла
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');
});
});