Packages
raxx
0.4.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.3
1.0.0-rc.2
retired
1.0.0-rc.1
retired
1.0.0-rc.0
retired
0.18.1
0.18.0
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
retired
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.14
0.14.13
0.14.12
0.14.11
0.14.10
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.1
0.11.0
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
0.0.1
Interface for HTTP webservers, frameworks and clients.
Current section
Files
Jump to
Current section
Files
lib/raxx/error_handler.ex
defmodule Raxx.ErrorHandler do
@moduledoc """
It might make sense for this to be called something else, i.e. error handler.
The aim is to ensure a productive 500/404 call is returned to the user.
The formatting of this information is separate
Handling the case of a missing route would be nice, in that case return a 404
This could be done on matching on the stack trace.
```elixir
try do
next.handle_request(request, %{})
catch
kind = :error, reason = :function_clause ->
stacktrace = System.stacktrace
[{mod, func, args, location} | rest] = System.stacktrace
end
```
asserting that func == :handle_request
asserting that args are length 2.
Elixir exceptions can be caught with rescue, however throws and exits need a catch block.
exceptions will also be caught in catch blocks.
Elixir.Exception.normalize can be used to turn caugth errors to exceptions
"""
def handle_request(request, env = %{next: next}) do
app = Map.get(env, :app)
try do
next.handle_request(request, %{})
catch
kind, reason ->
stacktrace = System.stacktrace
Raxx.DebugPage.html(request, {kind, reason, stacktrace}, app)
|> Raxx.Response.internal_server_error
end
end
end