Middleware
Middleware > withContent - itty-router
This middleware attempts to parse out the request.body into request.content using the following waterfall.
JSON --> FormData --> Text
If request.body is undefined, withContent skips these checks, leaving request.content as undefined. Do note that each of these methods will be applied automatically, leaving request.content as either a JS object (json), a FormData instance, or string, depending on which one succeeded. It'll be up to you to enforce/check types within your handler.
Example: Posting Data
ts
router.post('/form', withContent, ({ content }) => {
// do stuff with the content
})Creating Your Own
There's nothing tricky about writing middleware in itty, and writing your own content handler is no exception.
For instance, here's a simplified JSON-only content handler, that includes a 400 error if parsing a malformed JSON body.
Example
ts
import { IRequest, error } from 'itty-router'
// parses JSON as request.content or returns a 400 error
export const withJsonContent = async (request: IRequest) => {
try {
request.content = await request.json()
} catch (err: any) {
return error(400, 'Invalid JSON payload.')
}
}js
import { error } from 'itty-router'
// parses JSON as request.content or returns a 400 error
export const withJsonContent = async (request) => {
try {
request.content = await request.json()
} catch (err) {
return error(400, 'Invalid JSON payload.')
}
}