Joi para JavaScript (Node.js): guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao Joi: o que é e para que serve

\n\n

Joi é uma poderosa biblioteca para validação de dados no ambiente JavaScript (Node.js). Ela permite descrever esquemas de dados usando uma API simples e expressiva e, em seguida, verificar se objetos reais correspondem a esses esquemas. Joi é especialmente popular no desenvolvimento do lado do servidor de aplicações web, onde é necessário validar requisições recebidas, configurações, dados de formulários e quaisquer outras estruturas de dados.

\n\n

Principais razões para usar Joi:

\n
    \n
  • Segurança: impede que dados incorretos ou maliciosos entrem na sua aplicação
  • \n
  • Legibilidade do código: esquemas Joi são fáceis de ler e entender
  • \n
  • Flexibilidade: suporta estruturas aninhadas complexas, validação condicional e regras personalizadas
  • \n
  • Integração: funciona muito bem com Express, Koa, Fastify e outros frameworks
  • \n
  • Erros detalhados: fornece mensagens de erro claras indicando o local exato do problema
  • \n
\n\n

Instalação do Joi

\n\n

A instalação do Joi em um projeto Node.js é feita via npm ou yarn:

\n\n
# Via npm\nnpm install joi\n\n# Via yarn\nyarn add joi\n\n# Se você usa TypeScript, instale os tipos (opcional)\nnpm install @types/joi --save-dev
\n\n

Após a instalação, você pode importar o Joi no seu projeto:

\n\n
const Joi = require('joi');\n// ou para módulos ES:\n// import Joi from 'joi';
\n\n

Início rápido: primeiro exemplo de validação

\n\n

Vamos criar um esquema simples para validar dados de usuário e testar seu funcionamento:

\n\n
const Joi = require('joi');\n\n// Definindo o esquema de validação\nconst schema = Joi.object({\n    username: Joi.string()\n        .alphanum()\n        .min(3)\n        .max(30)\n        .required(),\n    password: Joi.string()\n        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),\n    email: Joi.string()\n        .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })\n});\n\n// Dados para verificação\nconst userData = {\n    username: 'john_doe',\n    password: 'myPassword123',\n    email: 'john@example.com'\n};\n\n// Executando a validação\nconst { error, value } = schema.validate(userData);\n\nif (error) {\n    console.log('Erro de validação:', error.details);\n} else {\n    console.log('Dados válidos:', value);\n}
\n\n

Neste exemplo, criamos um esquema para um objeto com três campos. O método validate() retorna um objeto com duas propriedades: error (se houver erros) e value (dados validados).

\n\n

Métodos principais do Joi

\n\n

1. Joi.string() — Validação de strings

\n

O que faz: Cria um validador para valores de string. Fornece vários métodos para verificar comprimento, formato, conteúdo e outras características da string.

\n\n

Parâmetros: Sem parâmetros. Retorna um objeto validador ao qual você pode aplicar uma cadeia de métodos.

\n\n

Exemplo:

\n
const schema = Joi.string()\n    .min(3)           // comprimento mínimo de 3 caracteres\n    .max(10)          // comprimento máximo de 10 caracteres\n    .alphanum()       // apenas letras e números\n    .required();      // campo obrigatório\n\nconsole.log(schema.validate('Hello'));    // { value: 'Hello' }\nconsole.log(schema.validate('Hi'));       // { error: ... } - string muito curta\nconsole.log(schema.validate('Hello123')); // { value: 'Hello123' }\nconsole.log(schema.validate('Hello!'));   // { error: ... } - contém caracteres especiais
\n\n

2. Joi.number() — Validação de números

\n

O que faz: Cria um validador para valores numéricos. Permite verificar intervalo, se é inteiro, positividade e outras propriedades dos números.

\n\n

Parâmetros: Sem parâmetros. Suporta encadeamento de métodos para configuração.

\n\n

Exemplo:

\n

                
    
    

Recommendations