Core Development Concepts > Extending and Customizing
Intercepting the Request
Learn how to intercept the request in it's initial stage
- how to intercept the request
- what you can do with the request at this point
Introduction
In the 5.34.0
version we added a possibility for users to intercept the Fastify request in it’s initial phase.
It can be done via the HandlerOnRequestPlugin
.
With this plugin you can do anything with the Fastify’s Request object, even stop the request from being processed. To find out why you can stop the request from being processed, read about it in the Fastify Lifecycle and Fastify Hooks documentation.
Creating and Registering the Plugin to Intercept the Request
Of course, as with our other plugins, you must register it in the Lambda handler plugins array:
Intercepting theOPTIONS
Request and Stopping the Request From Being Processed
By default, Webiny intercepts the OPTIONS
request and stop all of the Fastify lifecycles, after the onRequest
, from being ran.
We do this because we have no need to run all the code we usually run for, eg., POST
request.
You can see the code here.
Via the HandlerOnRequestPlugin
, users can prevent our default behavior.
Why Would the User Prevent the Webiny Default Behavior?
The most simple answer would be: to output their own headers in the OPTIONS
request.
How Can Users Prevent the Webiny Default Behavior onOPTIONS
Request to Be Executed?
To prevent the Webiny default behavior on OPTIONS
request, user would need to add a simple plugin which returns false
as the result.
Here is an example of sending a custom header myCustomHeader
, and prevent the Webiny default behavior, on OPTIONS
request:
Conclusion
Simply, with the HandlerOnRequestPlugin
user can, in the initial stage of the Fastify Request Lifecycle:
- intercept the request and prevent it to go further down the lifecycle line
- modify the Webiny default
OPTIONS
headers output to suit their own need - log the request to some outside service
Users must be careful on which path are they when executing the plugin code. Webiny has two built-in paths: /cms
and /graphql
.