Tradução da página original em inglês. Em caso de divergência, vale a versão em inglês.
Validação
O DaloyJS valida as entradas por meio do Standard Schema, uma interface mínima exposta por validadores como Zod, Valibot, ArkType e TypeBox (via um adaptador Standard Schema). Escolha o validador que combina com o seu projeto. O contrato do DaloyJS é o mesmo.
O que é validado
Para cada rota você pode declarar schemas para:
request.params: parâmetros de caminho decodificados. Eles começam como strings. Faça a coerção no seu schema se quiser números, UUIDs ou enums.request.query: valores da query string. Chaves repetidas viram arrays antes da validação.request.headers: cabeçalhos da requisição com nomes em minúsculas.request.body: corpos de requisição já interpretados. O corpo só é lido quando a rota declara um schema de corpo.responses[status].body: corpos de resposta tipados e validados.
Query strings, campos de formulário e campos multipart descartam chaves de poluição de protótipo como __proto__, constructor e prototype antes da validação.
Limite os campos numéricos (dinheiro, quantidades, IDs)
Um z.number() puro aceita 1e308, -Infinity depois de erros de coerção e outros valores que funcionam para floats IEEE, mas são desastrosos para dinheiro, estoque ou paginação. Sempre coloque limites de domínio nos campos numéricos da requisição:
O Zod 4 já rejeita NaN / números não finitos em z.number() em muitos casos, mas um teto (.max()) e uma restrição de sinal (.positive() / .nonnegative()) continuam sendo sua última linha de defesa contra fraude de reembolso e overflow. Combine isso com schemas de resposta para que campos sensíveis nunca vazem na saída.
Exemplo de ponta a ponta
Escolha seu validador
- Zod (em inglês): o padrão para a maioria das equipes. API encadeável, ecossistema grande, fácil de aprender.
- Valibot (em inglês): modular e tree-shakeable. Ótimo para runtimes de edge e contratos enviados ao navegador.
Schemas compatíveis com ArkType e TypeBox também funcionam quando expõem a mesma propriedade ~standard, mas o DaloyJS só traz documentação e templates oficiais para Zod e Valibot.
Lado a lado
Quando um schema expõe ~standard, o DaloyJS infere os tipos do handler, gera o OpenAPI e devolve erros problem+json do mesmo jeito, qualquer que seja o validador que o produziu.
Erros
- não confiávelRequisição brutaparams · query · headers · body
- standard schemaParse do schemavalidate(schema, input)
- em caso de falha422 problem+jsonerrors: [{ path, message }]
- em caso de sucessoHandler tipadoctx.body / params / query / headers
Para entradas inválidas, o DaloyJS devolve 422 Unprocessable Entity como problem+json RFC 9457, com um array errors de registros path e message por problema. Você não escreve um tratador de erro para isso: já vem embutido. Veja Erros e problem+json.
Validação de respostas
Quando um schema de resposta é declarado, o DaloyJS valida o retorno do handler antes de serializá-lo. O valor validado é o que vai para a rede, então schemas de objeto que removem chaves desconhecidas também impedem que campos não declarados vazem para os clientes. Se a validação falhar, o cliente recebe uma resposta de problema 500 ocultada em produção.
Limites de corpo e content types
A opção bodyLimitBytes do App (padrão 1 MiB) limita o Content-Length declarado e o tamanho transmitido de todo corpo de requisição -> 413. Desde a 1.5.4 isso vale em todas as rotas, incluindo corpos que o próprio handler lê de ctx.request; o limite é verificado de forma preguiçosa, quando o corpo é lido.
Quando uma rota declara request.body, o DaloyJS também aplica:
- Content-Type conferido com a lista
acceptsda rota, ou comallowedContentTypesglobal, se definido -> 415. - Tipos de corpo aceitos por padrão:
application/json,application/x-www-form-urlencodedemultipart/form-data. - Parsing protegido contra poluição de protótipo para JSON, query strings, formulários urlencoded e formulários multipart.
Corpos JSON viram objetos, corpos urlencoded passam por URLSearchParams e corpos multipart passam pela API Request.formData() da plataforma. Se você habilitar um media type de texto personalizado em uma rota, o DaloyJS passa o texto decodificado para o seu schema de corpo.
Misturando validadores
Você pode combinar validadores por rota. Um schema Zod em um arquivo e um schema Valibot em outro são ambos válidos, o que ajuda ao migrar uma base de código existente ou ao consumir schemas de um pacote compartilhado.
Última atualização: