prodap-fabs-simple-error-handler
v1.1.2
Published
Biblioteca para tratar erros lançados pelos serviços PRODAP
Downloads
299
Readme
Prodap Fabs Simple Error Handler
Essa biblioteca foi criada a fim de de padronizar e simplificar o tratamento de exceções nos serviços Prodap Fabs. Não é necessário realizar nenhum tipo de configuração prévia para sua execução, porém, o uso do framework Express é obrigatório.
Os objetivos da biblioteca são: facilitar e padronizar o tratamento de exceções e permitir o envio de respostas mais flexíveis para cenários de erro.
Índice
- Instalação
- Utiilização como objeto
- Utiilização como middleware
- Utiilização
- Erros disponíveis
- Erros não tratados
- Contribua
Instalação
Esta é uma biblioteca do Node.js disponível por meio do registro npm.
$ npm install prodap-fabs-simple-error-handler
Utilização como objeto
Para utilizar a biblioteca é necessário importar o objeto ErrorHandler
. Através do método execute
deve ser enviado via parâmetro, o erro capturado e o objeto response
do Express.
Caso o erro capturado seja um erro tratado pela biblioteca, será enviada uma resposta com seu respectivo "HTTP Status Code" e uma mensagem, caso o erro não seja identificado pela biblioteca, será enviada uma mensagem de erro interno.
```js
import { ErrorHandler, BadRequestError } from 'prodap-fabs-simple-error-handler'
async update(req, res, updateRecord) {
try {
if (!req.body) {
throw new BadRequestError('Deve ser enviado um objeto para atualização.')
}
const updatedRecord = await updateRecord.execute(req.body)
res.status(200).json({ data: updatedRecord })
} catch(err) {
ErrorHandler.execute(err, res)
}
}
```
Dado o exemplo, caso não seja enviado um body
para a requisição, será enviada uma resposta com "Status Code 400" e o seguinte formato de mensagem:
```json
{ "message": "Deve ser enviado um objeto para atualização." }
```
Caso a execução do caso de uso updateRecord
lance um erro não tratado, a resposta será enviada com "Status Code 500" e o seguinte formato de mensagem:
```json
{ "message": "Erro interno no servidor." }
```
Utilização como middleware
Também é possível utilizar a biblioteca como um middleware
. Para isto, é necessário importar a função errorHandlerMiddleware
e adicionar sua chamada à uma rota/route
específica, ou dentro do sistema de roteamento/router
, ou como middleware utilizado pela própria raíz do serviço/app
.
Para os exemplos que seguirão, será utilizado o seguinte controller
como referência:
```js
import { ErrorHandler, BadRequestError } from 'prodap-fabs-simple-error-handler'
export function recordController(updateRecord) {
return () => ({
async update(req, res, next) {
try {
if (!req.body) {
throw new BadRequestError('Deve ser enviado um objeto para atualização.')
}
const updatedRecord = await updateRecord.execute(req.body)
res.status(200).json({ data: updatedRecord })
} catch(err) {
next(err)
}
}
})
}
```
- Implementação na rota/
route
:import express from 'express' import { errorHandlerMiddleware } from 'prodap-fabs-simple-error-handler' import { recordController } from './RecordController' import { updateRecord } from '../useCase/updateRecord' const app = express() const recordController = recordController(updateRecord) app.patch('/updateRecord', recordController.update, errorHandlerMiddleware) app.listen(3000)
- Implementação no sistema de roteamento/
router
:import * as express from 'express' import { errorHandlerMiddleware } from 'prodap-fabs-simple-error-handler' import { recordController } from './RecordController' import { updateRecord } from '../useCase/updateRecord' const router = express.Router() const recordController = recordController(updateRecord) export function recordsRouter() { router.patch('/updateRecord', recordController.update) router.use(errorHandlerMiddleware) }
- Implementação na raíz do serviço/
app
:import express from 'express' import { errorHandlerMiddleware } from 'prodap-fabs-simple-error-handler' import { recordController } from './RecordController' import { updateRecord } from '../useCase/updateRecord' const app = express() const recordController = recordController(updateRecord) app.patch('/updateRecord', recordController.update) app.use(errorHandlerMiddleware) app.listen(3000)
Erros disponíveis
Os erros disponibilizados pela biblioteca possuem por padrão uma mensagem pré definida. Esta mensagem será enviada caso, no momento do lançamento da exceção, não seja definida nenhuma mensagem customizada para o erro.
BadRequestError
- Mensagem padrão: "Requisição inválida."
- Status Code: 400
NotFoundError
- Mensagem padrão: "Registro não encontrado."
- Status Code: 404
Erros não tratados
Será tratado como "erro interno" todo erro que não for disponibilizado pela biblioteca, desta forma, é importante que ao lançar uma exceção conhecida, o erro utilizado seja disponibilizado pela biblioteca.
- Mensagem padrão: "Erro interno no servidor."
- Status Code: 500
Contribua
Para propor melhorias ou adicionar suporte para novos erros, siga os seguintes passos:
- Implemente a melhoria proposta em uma
branch
seguindo a seguinte nomenclatura:- Para adição de erro utilize:
feature/newErrorName-userName
- Para adição de multiplos erros utilize:
feature/errors-userName
- Para proposição de melhoria utilize:
improvement/methodToBeImproved-userName
- Para adição de erro utilize:
- Adicione testes unitários para garantir a cobertura funcionalidade da implementada.
- Abra um Merge Request seguindo a seguinte nomenclatura:
- Para adição de erro utilize:
Error: newErrorName - userName
- Para adição de multiplos erros utilize:
Error: new errors - userName
- Para proposição de melhoria utilize:
Improvement: methodToBeImproved - userName
- Para adição de erro utilize: