2012-01-19 4 views
1

Я хочу, чтобы иметь возможность отправлять дружественное сообщение об ошибке моему пользователю всякий раз, когда я не могу подключиться к моему серверу MongoDB изнутри node.js, вместо того, чтобы просто иметь node.js, так же как и сейчас.Отображение ошибок с node.js

По-видимому, это не сработает, поскольку я не могу получить доступ к переменной ответа вне метода маршрута (app.get('/' ...), так что же мне делать?
Не нужно отображать что-то фантастическое, но просто информировать пользователя о временной проблеме было бы удивительно.

mongoose.connect('mongodb://localhost/test', function(err) { 
    if (err) { 
     //response.send('Temporary problem', 500); 
    } 
}); 

// Routes 
app.get('/', index.index); 
//... And so on 

ответ

0

Вы можете использовать альтернативные маршруты, если произошла ошибка соединения, поэтому не требуется выполнять проверки соединений в каждом обработчике запросов.

function connect() { 
    mongoose.connect(connStr, function(err) { 
    if (err) { 
     // all GET requests will end with error message 
     app.get('*', function(req, res) { 
     res.end('DB error'); 
     }); 

     // handle errors, retry connection attempt or something... 

     app.listen(...); 
     return; 
    } 

    // Routes 
    app.get('/', index.index); 
    //... And so on 

    app.listen(...); 
    }; 
} 

var app = express.createServer(); 
connect(); 

Однако Вы должны найти способ маршрута '*' падения, когда ваше соединение будет вверх.

0

Вы можете установить глобальную переменную из блока

mongoose.connect('mongodb://localhost/test', function(err) { 
    if (err) { 
     //response.send('Temporary problem', 500); 
    } 
}); 

Если эта глобальная переменная истина/ложь/..., акт соответственно в методе маршрута.

Не самый красивый подход, но он будет работать и прост в реализации.

1

Ошибка передачи промежуточного программного обеспечения в экспресс. Поместите его после маршрутизатора.

app.use(express.errorHandler({ dumpExceptions: true })); 

Вы можете использовать его по телефону next() в маршруте

app.get('/user/:userId', function(req, res, next){ 
    User.get(req.params.userId, function(err, user){ 
    if (err) return next(err); 
    res.send('user ' + user.name); 
    }); 
});