как обрабатывать и выдавать ошибки из serverpod

      Future<List<Business>> getBusiness(Session session, {int? id}) async {
    return await Business.find(
      session,
      where: (t) => id != null ? t.id.equals(id) : Constant(true),
    );
  }

Как вернуть модель ошибки, если произойдет какая-либо ошибка, например, если идентификатор не существует или что-то в этом роде

1 ответ

Поскольку метод find возвращает список, он будет пустым, вы можете проверить, пуст ли список, а затем выдать исключение Serialsable.

Однако в вашем запросе похоже, что вас интересует только определенная строка. Для этого варианта использования существует специальная функция, которую вы можете использовать вместо этого:findByIdкоторый принимает объект сеанса и идентификатор.

      Future<Business> getBusiness(Session session, int id) async {
  final business = await Business.findById(
    session,
    id
  );

  if (business == null) {
    throw NotFound();
  }

  return business;
}

В папке протокола у вас будет что-то вроде этого:

      ## not_found.yaml

exception: NotFound
fields:
  message: String

На стороне клиента:

      try {
  final result = await client.business.getBusiness(id);
} on (NotFound) catch (error) {
  // Handle not found.
} catch (error) {
  // Unexpected error.
}
Другие вопросы по тегам