Reference
Response Helpers
Mreact Router exports small helpers for common response flows. Use throwing helpers inside loaders and server render paths, and return Response objects from route handlers and middleware.
When to use this page
Use this page when you need the right helper for redirects, 404s, forms, cookies, CSRF, cache headers, or a typed response body.
Redirects and 404s
redirect() and throwNotFound() throw control-flow errors for loaders and render-time code. redirect303() returns a normal Response, which is useful in route handlers.
import { redirect, redirect303, throwNotFound } from "@reckona/mreact-router";
export async function loader() {
const session = await readSession();
if (session === undefined) {
redirect("/login");
}
const project = await findProject(session.projectId);
if (project === undefined) {
throwNotFound();
}
return { project };
}
export async function POST() {
return redirect303("/thanks");
}Use redirectExternal() for off-site HTTP(S) redirects. redirect() intentionally rejects protocol-relative URLs, backslash variants, and schemes such as javascript:.
JSON, HTML, and text responses
json() delegates to Response.json(). html() and textError() set useful content types.
import { html, json, textError } from "@reckona/mreact-router";
export async function GET() {
return json({ ok: true });
}
export function fallbackHtml() {
return html("<main>Offline</main>");
}
export function badRequest() {
return textError("Invalid request", 400);
}Forms, cookies, and CSRF
Use parseForm() for standard form bodies. Use createFormCsrfToken(), formCsrfCookie(), and validateFormCsrf() for custom form or upload routes that do not go through server actions.
import { cookies, createFormCsrfToken, formCsrfCookie, parseForm } from "@reckona/mreact-router";
export async function POST(request: Request) {
const form = await parseForm(request);
const theme = cookies(request).get("theme") ?? "system";
return Response.json({ theme, name: form.get("name") });
}
export function GET(request: Request) {
const token = createFormCsrfToken(request);
return new Response(renderForm(token), {
headers: {
"set-cookie": formCsrfCookie(token),
},
});
}Related pages
API reference: redirect(), redirectExternal(), throwNotFound(), parseForm(), createFormCsrfToken(), and validateFormCsrf().