как обрабатывать и выдавать ошибки из 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.
}