fastify-zod-schema
is a Fastify plugin that allows users to define request schemas using Zod, providing type safety and validation.
To install the package, use npm:
npm install fastify-zod-schema
First, register the plugin in your Fastify app:
import fastify from 'fastify'
import { zodSchemaPlugin } from 'fastify-zod-schema'
const app = fastify()
app.register(zodSchemaPlugin);
With fastify-zod-schema
, you can define your request schemas using Zod. Below are some examples of usage with Fastify routes.
import z from 'zod'
const schema = {
body: z.object({
name: z.string(),
age: z.number().int().positive(),
}),
};
app.post('/user', { schema }, async (req, rep) => {
const { name, age } = req.body;
return { name, age };
});
import z from 'zod'
const schema = {
querystring: z.object({
search: z.string().min(1),
limit: z.number().int().positive().optional(),
}),
};
app.get('/search', { schema }, async (req, rep) => {
const { search, limit } = req.query;
return { search, limit };
});
import z from 'zod'
const schema = {
headers: z.object({
'x-api-key': z.string().uuid(),
}),
};
app.get('/protected', { schema }, async (req, rep) => {
const apiKey = req.headers['x-api-key'];
return { apiKey };
});
import z from 'zod'
const schema = {
body: z.object({
username: z.string().min(1),
password: z.string().min(6),
}),
querystring: z.object({
role: z.string().optional(),
}),
headers: z.object({
'x-api-key': z.string().min(1),
}),
response: {
200: z.object({
username: z.string().min(1),
role: z.string().optional(),
})
}
};
app.post('/#', { schema }, async (req, rep) => {
const { username, password } = req.body;
const { role } = req.query;
const apiKey = req.headers['x-api-key'];
return { username, role };
});
MIT
Feel free to modify this documentation to better suit your needs or to add more details as necessary.