Я работаю над REST API в Elixir. Я пытаюсь разработать систему, которая позволяет мне не соответствовать шаблону с пользовательским сообщением, которое будет возвращено клиенту. Я использую Plug.
Допустим, у меня есть конечная точка для создания пользователя в моей базе данных, и я могу сделать следующее утверждение, если произойдет сбой, если учетная запись уже существует:
0 = DbAdapter.select("SELECT * FROM users WHERE email = 'email@example.com';)
Это не работает с MatchError
, и плагин возвращает универсальный Internal server error
клиенту.
Что я хотел бы сделать, это определить некоторую конструкцию, подобную следующей:
0 = DbAdapter.select("...") << %{code: 1113, reason: "account already exists"}
Обычно, если утверждение 0 = DbAdapter.select("...")
не выполняется, я бы хотел вернуть %{code: 1113, reason: "account already exists"}
клиенту. Моя цель - очень простой синтаксис, такой как приведенный выше (может быть, перегрузка операторов или что-то в этом роде).
Насколько я понимаю, плагин обрабатывает ошибки следующим способом:
def handle_errors(conn, ree = %{kind: _kind, reason: _reason, stack: _stack}) do
IO.inspect ree
send_resp(conn, conn.status, "Internal error: The resource you're looking for might not exist on the server.")
end
Как получитьпользовательский кортеж ошибки при ошибке подтверждения и вернуть его клиенту в handle_errors? Есть ли чистый способ сделать это?