Handler Function
In this section we cover everything you need to know about a handler function. As in any other http library each route is assigned a handle function and it handles the incoming request to the specific route and returns response. In cloud-rover a handler function must a carry a specific signature.
Signature
handler(rc: RC): Promise<Response>;
It passes an RC
object which stands for Router Context.
RC
Interface
interface RC {
request: Request;
params: RouteParams;
env: unknown;
ctx: ExecutionContext;
}
Here each parameter contains information regarding the request, context or environment. A brief introduction of each parameter is given below:
request
: This is the standard Request interface for fetch request. It contains all the necessary information regarding the request.params
: RouteParams is an interface provided with cloud-rover, it has two propertiespathParams
andqueryParams
please refer to Dynamic Routing section to learn more.- env: This is cloudflare's binding of worker platform. This is provided by cloudflare. Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform. Learn more here
- ctx: provides run-time APIs. This also comes with core worker package from cloudflare. Learn more.
Example handler
export async function handleRoot(rc): Promise<Response> {
return reply.text('Hello World');
}
Reading JSON Request Body
You can read request body using request.json()
. Here's an example
export async function handlePost(rc): Promise<Response> {
const body = await rc.request.json();
const name = body.name;
return reply.text(`"Hello Mr. ${name}`);
}
In typescript use RC
as parameter type
export async function handlePost(rc: RC): Promise<Response> {
const body = await rc.request.json();
const name = body.name;
return reply.text(`"Hello Mr. ${name}`);
}
Instead of typing rc.request.foo
all the time it's recommended to destructure the object and use them directly.
Destructuring RC
We can write the previous example like this
export async function handlePost({request}): Promise<Response> {
const body = await request.json();
const name = body.name;
return reply.text(`"Hello Mr. ${name}`);
}
or in typescript like this
export async function handlePost({request}: RC): Promise<Response> {
const body = await request.json();
const name = body.name;
return reply.text(`"Hello Mr. ${name}`);
}
To learn more about the request object please refer to the [https://developer.mozilla.org/en-US/docs/Web/API/Request](MDN Reference).