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),
    },
  });
}

API reference: redirect(), redirectExternal(), throwNotFound(), parseForm(), createFormCsrfToken(), and validateFormCsrf().