Отображение ошибок с помощью node.js - PullRequest
1 голос
/ 19 января 2012

Я хочу иметь возможность отправлять дружественное сообщение об ошибке моему пользователю всякий раз, когда я не могу подключиться к своему серверу MongoDB из узла 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

Ответы [ 3 ]

1 голос
/ 20 января 2012

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

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);
  });
}); 
0 голосов
/ 19 января 2012

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

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 голосов
/ 19 января 2012

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

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

Если эта глобальная переменная имеет значение true / false / ..., действуйте соответственно в вашем методе маршрута.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...