Step 3: Understanding routes
The sample route is built using a RouteMap object:
import { ChiselRequest, RouteMap } from "@chiselstrike/api";
export default new RouteMap()
.get("/", function (): string {
return "hello world";
})
.post("/", async function (req: ChiselRequest): Promise<unknown> {
return await req.json();
});
Let's break down some of the details of what you see here.
File name
Route code always goes in your project's routes
directory, which was defined
in the project's Chisel.toml. The name of the file defines the URL path of the
route. During local development with the ChiselStrike CLI, the presence of
routes/hello.ts
creates an endpoint URL path of /dev/hello
.
Default export
The route file is understood to implement a node module that exports a single
RouteMap
object that defines the behavior of the route.
HTTP methods and paths
The route can specify behavior for different HTTP methods. This route defines
behavior for GET and POST using get()
and post()
methods with a path to
append to the base endpoint URL path of /dev/hello
. In this case, /
specifies no additional path components to append.
Handler functions
get()
and post()
accept a function that implements the behavior of the
route.
ChiselRequest parameter
Handler functions are passed a ChiselRequest
which describes the client's
request. It is a subclass of Request from the standard web fetch API.
It contains all of the data sent by the client's HTTP request.
Sync or async
The exported function may return immediately with the response to send, or it may return a Promise that becomes fulfilled with the data to send back to the client.