aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_rest.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2012-11-29 14:33:45 +0100
committerLoïc Hoguin <[email protected]>2012-11-29 16:15:28 +0100
commit5f6b6b6f6d2fbae74d09a75d3b27446a99bc2d5e (patch)
treef3627e94f65ac76e9869b9fab1c9a9215db2a207 /src/cowboy_rest.erl
parent6ec12f7ce87eb51564d01361ef82dd725036514e (diff)
downloadcowboy-5f6b6b6f6d2fbae74d09a75d3b27446a99bc2d5e.tar.gz
cowboy-5f6b6b6f6d2fbae74d09a75d3b27446a99bc2d5e.tar.bz2
cowboy-5f6b6b6f6d2fbae74d09a75d3b27446a99bc2d5e.zip
Add a better error message when user callbacks are not exported
Diffstat (limited to 'src/cowboy_rest.erl')
-rw-r--r--src/cowboy_rest.erl29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/cowboy_rest.erl b/src/cowboy_rest.erl
index c59af35..446558c 100644
--- a/src/cowboy_rest.erl
+++ b/src/cowboy_rest.erl
@@ -726,9 +726,19 @@ put_resource(Req, State, OnTrue) ->
%% list of content types, otherwise it'll shadow the ones following.
choose_content_type(Req, State, _OnTrue, _ContentType, []) ->
respond(Req, State, 415);
-choose_content_type(Req, State, OnTrue, ContentType, [{Accepted, Fun}|_Tail])
+choose_content_type(Req,
+ State=#state{handler=Handler, handler_state=HandlerState},
+ OnTrue, ContentType, [{Accepted, Fun}|_Tail])
when Accepted =:= '*' orelse Accepted =:= ContentType ->
case call(Req, State, Fun) of
+ no_call ->
+ error_logger:error_msg(
+ "** Cowboy handler ~p terminating; "
+ "function ~p was not exported~n"
+ "** Request was ~p~n** State was ~p~n~n",
+ [Handler, Fun, cowboy_req:to_list(Req), HandlerState]),
+ {ok, _} = cowboy_req:reply(500, Req),
+ close;
{halt, Req2, HandlerState} ->
terminate(Req2, State#state{handler_state=HandlerState});
{true, Req2, HandlerState} ->
@@ -759,19 +769,28 @@ has_resp_body(Req, State) ->
%% Set the response headers and call the callback found using
%% content_types_provided/2 to obtain the request body and add
%% it to the response.
-set_resp_body(Req, State=#state{content_type_a={_Type, Fun}}) ->
+set_resp_body(Req, State=#state{handler=Handler, handler_state=HandlerState,
+ content_type_a={_Type, Fun}}) ->
{Req2, State2} = set_resp_etag(Req, State),
{LastModified, Req3, State3} = last_modified(Req2, State2),
- case LastModified of
+ Req4 = case LastModified of
LastModified when is_atom(LastModified) ->
- Req4 = Req3;
+ Req3;
LastModified ->
LastModifiedStr = httpd_util:rfc1123_date(LastModified),
- Req4 = cowboy_req:set_resp_header(
+ cowboy_req:set_resp_header(
<<"last-modified">>, LastModifiedStr, Req3)
end,
{Req5, State4} = set_resp_expires(Req4, State3),
case call(Req5, State4, Fun) of
+ no_call ->
+ error_logger:error_msg(
+ "** Cowboy handler ~p terminating; "
+ "function ~p was not exported~n"
+ "** Request was ~p~n** State was ~p~n~n",
+ [Handler, Fun, cowboy_req:to_list(Req5), HandlerState]),
+ {ok, _} = cowboy_req:reply(500, Req5),
+ close;
{halt, Req6, HandlerState} ->
terminate(Req6, State4#state{handler_state=HandlerState});
{Body, Req6, HandlerState} ->