Packages
nova
0.9.2
0.15.1
0.14.3
0.14.1
0.13.7
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.11
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.4.4
0.4.3
0.4.2
0.4.1
0.2.2
0.1.0
0.0.1
0.0.0
Nova is a web application framework
Current section
Files
Jump to
Current section
Files
src/controllers/nova_error_controller.erl
-module(nova_error_controller).
-export([
not_found/1,
server_error/1
]).
not_found(Req) ->
%% Check the accept-headers
case cowboy_req:header(<<"accept">>, Req) of
<<"application/json">> ->
%% Render a json response
{ok, JsonLib} = nova:get_env(json_lib, thoas),
Json = erlang:apply(JsonLib, encode, [#{message => "Resource not found"}]),
{status, 404, #{<<"content-type">> => <<"application/json">>}, Json};
_ ->
%% Just assume HTML
Variables = #{status => "Could not find the page you were looking for",
title => "404 Not found",
message => "We could not find the page you were looking for"},
{ok, Body} = nova_error_dtl:render(Variables),
{status, 404, #{<<"content-type">> => <<"application/json">>}, Body}
end.
server_error(#{crash_info := #{stacktrace := Stacktrace, class := Class, reason := Reason}} = Req) ->
Variables = #{status => "Internal Server Error",
title => "500 Internal Server Error",
message => "Something internal crashed. Please take a look!",
extra_msg => io_lib:format("~p, ~p", [Class, Reason]),
stacktrace => Stacktrace},
case nova:get_environment() of
dev ->
%% We do show a proper error response
case cowboy_req:header(<<"accept">>, Req) of
<<"application/json">> ->
{ok, JsonLib} = nova:get_env(json_lib, thoas),
Json = erlang:apply(JsonLib, encode, [Variables]),
{status, 500, #{<<"content-type">> => <<"application/json">>}, Json};
_ ->
{ok, Body} = nova_error_dtl:render(Variables),
{status, 500, #{<<"content-type">> => <<"text/html">>}, Body}
end;
_ ->
{status, 500}
end.