npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

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

  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