Как использовать promises внутри экспресс-приложения?

Я пытаюсь использовать обещание внутри функции app.get, которое будет запускать запрос, который будет выполняться по обещанию. но проблема в том, что ответ не ждет обещания и просто отвечает.

любая идея, как код должен так обещать, может жить внутри app.get в экспресс-приложении?

Ответ 1

app.get('/test', function (req, res) {
    db.getData()
    .then(function (data) {
        res.setHeader('Content-Type', 'text/plain');
        res.end(data);
    })
    .catch(function (e) {
        res.status(500, {
            error: e
        });
    });
});

Ответ 2

Вот ответ от Экспресс-документация:

app.get('/', function (req, res, next) {
  // do some sync stuff
  queryDb()
  .then(function (data) {
    // handle data
    return makeCsv(data)
  })
  .then(function (csv) {
    // handle csv
  })
  .catch(next)
})

app.use(function (err, req, res, next) {
  // handle error
})

В основном это означает прохождение next через .catch(), так что общий маршрут обработки ошибок может инкапсулировать логику обработки ошибок ниже по течению.