Primate Logo Primate
Guides Validation

Validate request body

Validate incoming request body with schemas. Use Pema for type-safe validation.

Validation throws on failure; handle errors appropriately.

1) Define schema

Create validation schema.

// routes/user.ts
import p from "pema";

const UserSchema = p({
  name: p.string.min(1),
  email: p.string.email() ,
});

2) Validate in route

Parse and validate body.

// routes/user.ts
import p from "pema";
import route from "primate/route";

const UserSchema = p({
  name: p.string.min(1),
  email: p.string.email(),
});

export default route({
  async post(request) {
    const user = UserSchema.parse(await request.body.form());
    return { user };
  },
});

3) Handle validation errors

Catch and respond to errors.

import p from "pema";
import route from "primate/route";
import response from "primate/response";

const UserSchema = p({
  name: p.string.min(1),
  email: p.string.email(),
});

export default route({
  async post(request) {
    try {
      const user = UserSchema.parse(await request.body.form());
      // save user
      return { success: true };
    } catch (error) {
      return response.json({ error: error.message }, { status: 400 });
    }
  },
});