Documentation Index
Fetch the complete documentation index at: https://robintail-express-zod-api-69.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The ResultHandler class controls how your API sends responses and handles errors. It defines response schemas for success and error cases.
import { ResultHandler } from "express-zod-api";
import { z } from "zod";
const customResultHandler = new ResultHandler({
positive: (data) => ({
schema: z.object({ success: z.literal(true), data }),
mimeType: "application/json",
}),
negative: z.object({ success: z.literal(false), error: z.string() }),
handler: ({ error, output, response }) => {
if (error) {
response.status(error.statusCode || 500).json({
success: false,
error: error.message,
});
} else {
response.status(200).json({ success: true, data: output });
}
},
});
Configuration
positive
Type: (output: Schema) => { schema: Schema; mimeType: string | string[] | null }
Description: Defines success response schema.
positive: (data) => ({
schema: z.object({ data }),
mimeType: "application/json",
})
negative
Type: Schema
Description: Error response schema.
negative: z.object({ error: z.string() })
handler
Type: (params: HandlerParams) => void
Required: Yes
Description: Sends the actual response.
Parameters:
Validated endpoint output (on success)
Error object (on failure)
Pre-built Result Handlers
defaultResultHandler
Standard JSON responses:
// Success
{ "status": "success", "data": { ... } }
// Error
{ "status": "error", "error": { "message": "..." } }
arrayResultHandler
(Deprecated) Returns arrays directly for legacy APIs.
Examples
Custom Status Codes
const customStatusHandler = new ResultHandler({
positive: (data) => ({
schema: z.object({ data }),
mimeType: "application/json",
statusCode: 201,
}),
negative: z.object({ error: z.string() }),
handler: ({ error, output, response }) => {
if (error) {
const status = error.statusCode || 500;
response.status(status).json({ error: error.message });
} else {
response.status(201).json({ data: output });
}
},
});
Non-JSON Responses
import { ez } from "express-zod-api";
const fileHandler = new ResultHandler({
positive: { schema: ez.buffer(), mimeType: "image/png" },
negative: { schema: z.string(), mimeType: "text/plain" },
handler: ({ error, output, response }) => {
if (error) {
response.status(400).send(error.message);
} else if (output.buffer) {
response.type("image/png").send(output.buffer);
}
},
});
Empty Responses
const emptyHandler = new ResultHandler({
positive: { statusCode: 204, mimeType: null, schema: z.never() },
negative: { statusCode: 404, mimeType: null, schema: z.never() },
handler: ({ error, response }) => {
response.status(error ? 404 : 204).end();
},
});
Error Helpers
ensureHttpError()
Normalizes errors to have status codes:
import { ensureHttpError } from "express-zod-api";
const httpError = ensureHttpError(error);
console.log(httpError.statusCode); // 400, 401, 500, etc.
getMessageFromError()
Extracts error message:
import { getMessageFromError } from "express-zod-api";
const message = getMessageFromError(error);
See Also
Response Customization
Advanced response patterns
Error Handling
Error handling concepts