Validador de dados JSON para NodeJS
npm install joker-validator
Este método funciona através de 3 argumentos: data, rules e allowedFields.
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.
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"}}
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"}
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.
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.
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;
}