Traducción de la página original en inglés. Si algo no cuadra, prevalece la versión en inglés.
Validación
DaloyJS valida las entradas mediante Standard Schema, una interfaz mínima que exponen validadores como Zod, Valibot, ArkType y TypeBox (este último mediante un adaptador de Standard Schema). Elige el validador que encaje en tu proyecto. El contrato de DaloyJS es el mismo.
Qué se valida
En cada ruta puedes declarar esquemas para:
request.params: parámetros de ruta decodificados. Empiezan siendo cadenas. Conviértelos en tu esquema si quieres números, UUID o enums.request.query: valores de la query string. Las claves repetidas se convierten en arrays antes de la validación.request.headers: cabeceras de la petición, con los nombres en minúsculas.request.body: cuerpos de petición ya parseados. El cuerpo solo se lee cuando una ruta declara un esquema de cuerpo.responses[status].body: cuerpos de respuesta tipados y validados.
Las query strings, los campos de formulario y los campos multipart descartan antes de la validación las claves de contaminación de prototipos como __proto__, constructor y prototype.
Acota los campos numéricos (dinero, cantidades, IDs)
Un z.number() a secas acepta 1e308, -Infinity tras errores de conversión y otros valores que son válidos como flotantes IEEE pero desastrosos para dinero, inventario o paginación. Pon siempre límites de dominio en los campos numéricos de la petición:
Zod 4 ya rechaza NaN y los números no finitos en z.number() en muchos casos, pero un tope (.max()) y una restricción de signo (.positive() / .nonnegative()) siguen siendo tu red de seguridad frente al fraude con reembolsos y los desbordamientos. Combínalo con esquemas de respuesta para que los campos sensibles nunca salgan hacia fuera.
Ejemplo completo
Elige tu validador
- Zod (en inglés): la opción por defecto para la mayoría de los equipos. API encadenable, un ecosistema enorme y fácil de aprender.
- Valibot (en inglés): modular y tree-shakeable. Ideal para runtimes edge y para contratos que se envían al navegador.
Los esquemas compatibles con ArkType y TypeBox también funcionan cuando exponen la misma propiedad ~standard, pero DaloyJS solo ofrece documentación y plantillas propias para Zod y Valibot.
Comparación lado a lado
En cuanto un esquema expone ~standard, DaloyJS infiere los tipos del handler, genera OpenAPI y devuelve errores problem+json de la misma forma, sea cual sea el validador que lo haya creado.
Errores
- no confiablePetición en brutoparams · query · headers · body
- standard schemaParseo del esquemavalidate(schema, input)
- si falla422 problem+jsonerrors: [{ path, message }]
- si va bienHandler tipadoctx.body / params / query / headers
Ante una entrada no válida, DaloyJS devuelve 422 Unprocessable Entity como problem+json de la RFC 9457, con un array errors de registros path y message por cada problema. No tienes que escribir un manejador de errores para esto: viene integrado. Consulta Errores y problem+json.
Validación de respuestas
Cuando se declara un esquema de respuesta, DaloyJS valida lo que devuelve el handler antes de serializarlo. El valor validado es lo que se envía, así que los esquemas de objeto que eliminan las claves desconocidas también impiden que los campos no declarados lleguen a los clientes. Si la validación falla, en producción el cliente recibe una respuesta problem 500 con los detalles ocultos.
Límites de cuerpo y tipos de contenido
La opción bodyLimitBytes de App (1 MiB por defecto) limita el Content-Length declarado y el tamaño transmitido de cada cuerpo de petición -> 413. Desde la 1.5.4 se aplica en todas las rutas, incluidos los cuerpos que un handler lee por su cuenta desde ctx.request; el límite se comprueba de forma diferida, cuando se lee el cuerpo.
Cuando una ruta declara request.body, DaloyJS también aplica:
- El Content-Type frente a la lista
acceptsde la ruta, o frente aallowedContentTypesglobal si está configurado -> 415. - Tipos de cuerpo aceptados por defecto:
application/json,application/x-www-form-urlencodedymultipart/form-data. - Parseo a salvo de la contaminación de prototipos para JSON, query strings, formularios urlencoded y formularios multipart.
Los cuerpos JSON se parsean a objetos, los urlencoded pasan por URLSearchParams y los multipart por la API Request.formData() de la plataforma. Si activas en una ruta un tipo de medio de texto personalizado, DaloyJS pasa el texto decodificado a tu esquema de cuerpo.
Combinar validadores
Puedes combinarlos ruta a ruta. Un esquema de Zod en un archivo y uno de Valibot en otro son ambos válidos, algo útil cuando migras un código existente o consumes esquemas de un paquete compartido.
Última actualización: