Joker Validator

Validador de dados JSON para NodeJS

4
2
JavaScript

Logo de Joker Validator

Validador de dados JSON para Node.js

O joker-validator analisa os dados JSON enviados conforme regras personalizadas indicadas como parâmetros na função, retorna o resultado da validação e, caso os dados estejam inválidos, retorna também uma mensagem de erro padrão ou personalizada.

Instalação

npm install joker-validator

Parâmetros da Função:

Este método funciona através de 3 argumentos: data, rules e allowedFields.

Índice:

  1. data
  2. rules
  3. allowedFields

Exemplo

data



JSON baseado em chaves e valores como { "library": "json-validator" }.

Este pode ser os dados enviados através de uma requisição HTTP (REST).

Verificar const dataExample no exemplo abaixo.

rules



Objeto Javascript que contêm as regras para validação dos valores enviados em data.

Propriedades aceitáveis:



Esta propriedade serve para comparar se o tipo de dado enviado em data (conforme a chave indicada) corresponde ao valor setado aqui.

Valores aceitáveis: string, number, boolean, date (UTC), object e array

Ex: library: {dataType: "string"}




Define a quantidade mínima e máxima de caracteres de uma String ou itens de um Array. Você deve utilizar as propriedades min e/ou max.

Ex: library: {len: { min: 4, max: 14 }}




Define um intervalo númerico ou de data (date) aceitável para o valor enviado em data na chave indicada. Você deve utilizar as propriedades min e/ou max.

Ex: date: {range: { min: "1921-01-01", max: "1999-01-01"}}

–> Neste exemplo, queremos determinar que o valor de date em data só é aceitável em um intervalo entre 18 e 100 anos em relação à 01/01/2021



Array de Strings e/ou Números aceitáveis para o valor de uma determinada chave em data.

Ex: uf: {list: ["AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RO", "RS", "RR", "SC", "SE", "SP", "TO"]}




Exige que o valor de um determinado campo em data seja igual à outro campo também enviado em data. Normalmente utilizado para confirmar um campo de senha ou e-mail.

Ex: check_pass: {equals: "password"}




Determina se o valor do campo em data é de preenchimento obrigatório.

Ex: library: {required: true}




Compara se o valor do campo em data se enquadra na Expressão Regular em Javascript. definida na propriedade.

Ex: cep: {regex: /^[0-9]{8}|([0-9]{5}|[0-9]{2}.[0-9]{3})-[0-9]{3}$/i}




Compara o valor do campo em data conforme configuração de validação no Objeto customValidation em custom.validation.js.

Ex: email: {custom: "email"}

Em customValidation, você pode adicionar um conjunto de regras de validação e atribuir o nome que desejar.
Por padrão, customValidation possui validação de número de celular (formato brasileiro), e-mail, CEP, URL e formato de senha.



Personaliza a mensagem de erro no retorno da função conforme a regra definida.

Na String da mensagem, utilize {value} para imprimir o valor do campo em data, {field} para o nome do campo/chave em data e {NomeDaRegra} para o valor da regra (Ex: {list})

Para valores das regras utilize: {dataType}, {minLength}, {maxLength}, {minRange}, {maxRange}, {list}, {required}, {regex} e {custom}.

Ex: library: {dataType: "number", message: {dataType: "'{value}' do campo '{field}' não corresponde ao tipo de dado '{dataType}'"} }

Retorno do exemplo acima:

{validate: false, message: "'json-validator' do campo 'library' não corresponde ao tipo de dado 'number'"}

Verificar const rules no exemplo abaixo.

allowedFields



Array que contêm os nomes dos campos aceitáveis em data. Este parâmetro serve para limitar quais campos serão aceitos e não permite que tenha outros campos em data, ou seja, caso tenha algum campo com nome diferente dos que estão listados em allowedFields, a função retornará {validate: false}

Verificar const allowedFields no exemplo abaixo.

Exemplo

const validate = require('joker-validator');

const dataExample = {
    "username": "daiangm",
    "email": "[email protected]",
    "password": "Pa$$w0rd",
    "check_pass": "Pa$$w0rd",
    "phone": "(62)99999-9999",
    "cpf": "000.000.000-00",
    "birthdate": "12/12/1990",
    "uf": "GO",
}

const rules = {
    username: {
        dataType: "string",
        len: { min: 3, max: 16 },
        required: true,
        message: {len: "O valor de {field} deve ter entre {len[min]} e {len[max]} caracteres"}
    },
    email: {
        custom: "email",
        required: true,
        message: { custom: "'{value}' não é um endereço de {field} válido" }
    },
    password: {
        dataType: "string",
        custom: "Pa$$w0rd",
        len: { min: 8, max: 16 },
        required: true,
        message: {required: "É obrigatório o preenchimento do campo '{field}'"}
    },
    check_pass:{
        equals: "password",
        required: true
    },
    phone: {
        custom: "phone",
        required: true
    },
    cpf: {
        regex: /^[0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}$/i
    },
    birthdate: {
        dataType: "date",
        range: { min: "1900-01-01", max: "2003-01-01"}
    },
    uf: {
        list: ["GO", "MT", "MS"],
        message: { list: "O valor do campo '{field}' precisa ser preenchido com um dos valores da lista: {list}" }
    }
}

const allowedFields = ["username", "email", "password", "check_pass", "phone", "cpf", "birthdate", "uf"]

const result = validate(dataExample, rules, allowedFields);

console.log(result);

if(!result.validate){
    return false;
}