Try catch или then catch для rest api?
Используй try/catch, про колбеки можешь забыть. Раньше только так можно было отловить какие-то исключения во время выполнения, теперь в них нужды нет.
Код чище, понятнее.async getAll(req, res) {
    try {
       const { rows, rowCount } = await db.query(query)
       return res.status(200).send({ rows, rowCount })
    } catch (error) {
       return res.status(400).send(error)
    }
  }
Прочитал на stackoverflow что try catch лучше использовать для синхронных действий, а then catch для асинхронных? Так ли это?Да. 
Т.к. try-catch блокирует дальнейшее исполнение кода (если он без async/await обёртки) и ждёт завершения текущей секции.