mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-15 12:40:25 +00:00
Add hooks documentation to the guide
This commit is contained in:
parent
7f2409a4bb
commit
2f0d683622
1 changed files with 67 additions and 2 deletions
|
@ -4,9 +4,74 @@ Hooks
|
||||||
On request
|
On request
|
||||||
----------
|
----------
|
||||||
|
|
||||||
@todo Describe.
|
The `onrequest` hook is called as soon as Cowboy finishes fetching
|
||||||
|
the request headers. It occurs before any other processing, including
|
||||||
|
routing. It can be used to perform any modification needed on the
|
||||||
|
request object before continuing with the processing. If a reply is
|
||||||
|
sent inside this hook, then Cowboy will move on to the next request,
|
||||||
|
skipping any subsequent handling.
|
||||||
|
|
||||||
|
This hook is a function that takes a request object as argument,
|
||||||
|
and returns a request object. This function MUST NOT crash. Cowboy
|
||||||
|
will not send any reply if a crash occurs in this function.
|
||||||
|
|
||||||
|
You can specify the `onrequest` hook when creating the listener,
|
||||||
|
inside the request options.
|
||||||
|
|
||||||
|
``` erlang
|
||||||
|
cowboy:start_http(my_http_listener, 100,
|
||||||
|
[{port, 8080}],
|
||||||
|
[
|
||||||
|
{env, [{dispatch, Dispatch}]},
|
||||||
|
{onrequest, fun ?MODULE:debug_hook/1}
|
||||||
|
]
|
||||||
|
).
|
||||||
|
```
|
||||||
|
|
||||||
|
The following hook function prints the request object everytime a
|
||||||
|
request is received. This can be useful for debugging, for example.
|
||||||
|
|
||||||
|
``` erlang
|
||||||
|
debug_hook(Req) ->
|
||||||
|
erlang:display(Req),
|
||||||
|
Req.
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure to always return the last request object obtained.
|
||||||
|
|
||||||
On response
|
On response
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
@todo Describe.
|
The `onresponse` hook is called right before sending the response
|
||||||
|
to the socket. It can be used for the purposes of logging responses,
|
||||||
|
or for modifying the response headers or body. The best example is
|
||||||
|
providing custom error pages.
|
||||||
|
|
||||||
|
Note that like the `onrequest` hook, this function MUST NOT crash.
|
||||||
|
Cowboy may or may not send a reply if this function crashes.
|
||||||
|
|
||||||
|
You can specify the `onresponse` hook when creating the listener also.
|
||||||
|
|
||||||
|
``` erlang
|
||||||
|
cowboy:start_http(my_http_listener, 100,
|
||||||
|
[{port, 8080}],
|
||||||
|
[
|
||||||
|
{env, [{dispatch, Dispatch}]},
|
||||||
|
{onresponse, fun ?MODULE:custom_404_hook/4}
|
||||||
|
]
|
||||||
|
).
|
||||||
|
```
|
||||||
|
|
||||||
|
The following hook function will provide a custom body for 404 errors
|
||||||
|
when it has not been provided before, and will let Cowboy proceed with
|
||||||
|
the default response otherwise.
|
||||||
|
|
||||||
|
``` erlang
|
||||||
|
custom_404_hook(404, Headers, <<>>, Req) ->
|
||||||
|
{ok, Req2} = cowboy_req:reply(404, Headers, <<"404 Not Found.">>, Req),
|
||||||
|
Req2;
|
||||||
|
custom_404_hook(_, _, _, Req) ->
|
||||||
|
Req.
|
||||||
|
```
|
||||||
|
|
||||||
|
Again, make sure to always return the last request object obtained.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue