Celebrate Middleware
Esse exemplo tem por objetivo mostrar o uso desse pacote para a tradução das mensagens de erros de validação utilizando o middleware ((celebrate)[https://github.com/arb/celebrate]) para fazer as validações. O código desse exemplo está disponível em: examples/celebrate.
#
DependênciasPrimeiro, instale as dependências utilizadas:
yarn add express celebrate joi-translation-pt-br
Ou, com o npm:
npm install express celebrate joi-translation-pt-br
#
TypeScriptCaso esteja trabalhando com TypeScript, é necessário ainda, instalar as bibliotecas ts-node e @types/express como dependências de desenvolvimento:
yarn add -D ts-node @types/express
Ou, com o npm:
npm install --save-dev ts-node @types/express
#
CódigoO código do exemplo é um servidor, extremamente simples, com a rota /test
cuja validação exige um e-mail e uma senha no corpo:
import express from 'express';import { celebrate, errors, Joi } from 'celebrate';import { messages } from 'joi-translation-pt-br';
const ExampleValidation = celebrate({ body: Joi.object().keys({ email: Joi.string().required().email(), password: Joi.string().required(), }),}, { abortEarly: false, messages: messages,});
const app = express();app.use(express.json());
app.post('/test', ExampleValidation, (req, res) => { res.json();});
app.use(errors());app.listen(3333);
Assim, fazendo requisições com dados não formatados corretamente, teremos respostas como a que segue abaixo:
{ "statusCode": 400, "error": "Bad Request", "message": "Validation failed", "validation": { "body": { "source": "body", "keys": [ "email", "password" ], "message": "\"email\" deve ser um e-mail válido. \"password\" é obrigatório" } }}
#
Customizando as LabelsPerceba que temos nas mensagens os campos da seguinte forma: \"password\"
. Para customizarmos essas labels podemos utilizar o objeto .label("Senha")
da biblioteca Joi, conforme o exemplo abaixo:
import express from 'express';import { celebrate, errors, Joi } from 'celebrate';import { messages } from 'joi-translation-pt-br';
const ExampleValidation = celebrate({ body: Joi.object().keys({ email: Joi.string().required().email().label("E-mail"), password: Joi.string().required().label("Senha"), }),}, { abortEarly: false, messages: messages,});
const app = express();app.use(express.json());
app.post('/test', ExampleValidation, (req, res) => { res.json();});
app.use(errors());app.listen(3333);
A partir desse exemplo, teremos mensagens como:
{ "statusCode": 400, "error": "Bad Request", "message": "Validation failed", "validation": { "body": { "source": "body", "keys": [ "email", "password" ], "message": "\"E-mail\" deve ser um e-mail válido. \"Senha\" é obrigatório" } }}
É possível, ainda, customizar o middleware errors()
do celebrate para customizar a resposta. Isso pode ser visto no exemplo Celebrate Middleware Customizado.