TypeScript
TypeScript > Request Handlers & Middleware - itty-router
To type handlers/middleware use the RequestHandler<RequestType, Args>
type. By default, RequestType
is set to the generic IRequest
.
Example: Generic Handler
ts
import {
RequestHandler,
Router,
} from 'itty-router'
const router = Router()
// define middleware with the RequestHandler type (no generic)
const withUser: RequestHandler = (request) => {
request.user = 'Kevin'
}
router.get('/', withUser, (request) => {
request.user = 'Kevin' // this works (IRequest)
})
Example: Custom Type
ts
import {
IRequestStrict,
RequestHandler,
Router,
} from 'itty-router'
// define a custom request type
type UserRequest = {
user: string
} & IRequestStrict
const router = Router()
// and pass it as the generic to RequestHandler
const withUser: RequestHandler<UserRequest> = (request) => {
request.user = 'Kevin'
}
router.get('/', withUser, (request) => {
request.user = 'Kevin' // this works (UserRequest)
})
Example: Additional Arguments
Just like with a route, we can pass generics to a RequestHandler
to give it access to the additional arguments. In this example, we assume additional arguments are being provided to the handlers (assumes that they have been passed to the router .fetch()
by Cloudflare.)
ts
import {
RequestHandler,
IRequest,
} from 'itty-router'
// we define our environment
type Environment = { KV: KVNamespace }
// and now both args combined (that Workers send to the .fetch())
type CFArgs = [Environment, ExecutionContext]
// creating some middleware that needs access to CF variables
export const withUser: RequestHandler<IRequest, CFArgs> =
(request, env, context) => {
request.user = 'Kevin'
env.KV.get('test') // this works!
ctx.waitUntil() // so does this!
}
^ assumes Cloudflare Worker environment