Межплатформенное ПО для асинхронных операций мобильных приложений Azure

У меня есть экспресс-приложение, работающее с мобильными службами Azure.

// production error handler
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
  ptlogger.error(err.message);
});

проблема в том, что этот фрагмент не вызывается, когда внутри обратного вызова результата запроса, например

   router.get('/id/:subscriberid', (req, res, next) => {

    var mssqlObject = req.azureMobile.data;
    var query = { sql: strSql };
    mssqlObject.execute(query).then( (results) => {
         console.log(unDeclaredVariable); // should hit the error handler here
    });
});

он бы попал в промежуточное ПО, если бы он был вне асинхронного вызова mssqlObject

Примечание: я не хочу использовать блок.catch, потому что у меня есть несколько других сценариев, где я хотел бы решить проблему раз и навсегда.

Заранее спасибо.

1 ответ

Решение

На самом деле это не проблема мобильных приложений Azure, а скорее проблема Node.js.

Добавьте следующее в ваш код:

.catch((error) => {
    console.log(error);
    throw error;
});

Таким образом, вы можете отловить ошибку как локально, так и на глобальном уровне.

Другие вопросы по тегам