ZuploRequest
The ZuploRequest object is the main parameter passed to both Request Handlers and Policies. It represents the incoming request.
ZuploRequest inherits from the web standard Request
class used with fetch
-
you can read more about this on MDN including an explanation of how all of its
properties and methods work:
https://developer.mozilla.org/en-US/docs/Web/API/Request.
In addition to the standard properties, the following are added for convenience.
Properties
params
- if you use tokens in your route’s URL, we automatically parse them into properties on theparams
property of your request. For example, imagine a route with path/products/:productId/vendors/:vendorId
. A match on this would yield values as follows:
ts
user
- an optional object identifying a ‘user’. Ifundefined
this typically means the request is anonymous. If present, the user object will have asub
property that's a unique identifier for that user. There is also an optionaldata
property that's ofany
type that typically contains other information about the user. When using JWT tokens you’ll usually find all the claims here.query
- a dictionary of query-string values. For example, a URL with a query string likehttps://example.com?foo=bar
would present as follows:
ts
Constructor
It can be useful to create a new ZuploRequest inside a policy (see policies) to forward to the next policy or handler in the chain.
Basic Constructor
ts
Constructor with Zuplo-specific Options
The constructor accepts a ZuploRequestInit
object that extends the standard
RequestInit
with additional properties:
ts
This is particularly useful when creating internal requests or modifying the current request while preserving user context.
Request Query
The request.query
property is a helper that takes your QueryString and
converts it into a JavaScript dictionary (for example Record<string, string>
in TypeScript). This helper property doesn't support multiple values for the
same key on a QueryString, for example:
?foo=bar&foo=wibble
To access the array of values in this case you can instead use the URL type and
searchParams
:
ts
Cloning and Modifying Requests
When you need to create a modified version of an existing request, you can use the ZuploRequest constructor with the existing request:
ts
Type Safety with Parameters
ZuploRequest supports TypeScript generics for type-safe access to params, query parameters, and user data:
ts
You can also use shorthands to just define a subset of these types:
ts
Type Safety with User Data
For better type safety with user data, define interfaces for your user structure:
ts
See Also
- Request User - Working with authenticated users
- ZuploContext - The context object
- Safely Clone a Request or Response - Best practices for cloning
- MDN Request Documentation - Web standard Request API