prodap-fabs-simple-error-handler
TypeScript icon, indicating that this package has built-in type declarations

1.1.2 • Public • Published

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

  1. Instalação
  2. Utiilização como objeto
  3. Utiilização como middleware
  4. Utiilização
  5. Erros disponíveis
  6. Erros não tratados
  7. 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)
            }
        }
    })
}
```
  1. 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)
  2. 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)
    }
  3. 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:

  1. 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
  2. Adicione testes unitários para garantir a cobertura funcionalidade da implementada.
  3. 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

Package Sidebar

Install

npm i prodap-fabs-simple-error-handler

Weekly Downloads

61

Version

1.1.2

License

MIT

Unpacked Size

20.7 kB

Total Files

34

Last publish

Collaborators

  • tarley
  • lucassgomide
  • eusamuelsan