DEV Community

Cover image for Lidando com erros no Nuxt 2
Richard Manzoli
Richard Manzoli

Posted on

Lidando com erros no Nuxt 2

E aí, hoje estou aqui para falar um pouco sobre como lidar com erros no Nuxt 2, utilizando o layout de erros.

Já se deparou com essa tela de erro quando o usuário acessa uma rota que não existe? 404 Not Found

Erro de rota não encontrada

Podemos lidar com esse tipo de erro e muitos outros usando um layout do Nuxt chamado error.

1 - Criando o layout de erro

Dentro da pasta /layouts, vamos criar um arquivo chamado error.vue com uma estrutura básica para visualizarmos imediatamente a tela de erro. Com isso, teremos acesso a uma página diferente, mais amigável e descritiva para o usuário.

<template>
  <div class="error-container">
    <h1 class="error__code">404</h1>
    <p class="error__message">Oops! Parece que você se perdeu.</p>
    <p class="error__message">
      A página que você está procurando não foi encontrada.
    </p>
    <a class="error__back-link" href="/">Voltar para a página inicial</a>
  </div>
</template>
<style lang="scss">
$font-family: Arial, sans-serif;
$error-color: #e74c3c;
$text-color: #333;
$link-color: #3498db;

body {
  font-family: $font-family;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

.error-container {
  text-align: center;

  &__code {
    font-size: 6rem;
    font-weight: bold;
    color: $error-color;
    margin: 0;
  }

  &__message {
    font-size: 1.5rem;
    color: $text-color;
    margin: 10px 0;
  }

  &__back-link {
    color: $link-color;
    text-decoration: none;
  }
}
</style>
Enter fullscreen mode Exit fullscreen mode

Tela de erro - status 400

2 - Lidando com erros

Uma característica interessante desse layout de erro é que temos uma prop chamada error que é sempre enviada. No primeiro exemplo, fixamos um 404 e textos como exemplo, mas podemos tornar isso dinâmico com essa prop.

Adicionando o script abaixo já conseguimos usar o computed statusCode para definir um titulo e lidar com condicionais para a página e usar no lugar do 404 estático e também ajustar os textos para diferentes erros caso exista.

// Ajustar o template
<template>
  <div class="error-container">
    <div v-if="statusCode === 404">
      <h1 class="error__code">{{ statusCode }}</h1>
      <p class="error__message">Oops! Parece que você se perdeu.</p>
      <p class="error__message">
        A página que você está procurando não foi encontrada.
      </p>
      <a class="error__back-link" href="/">Voltar para a página inicial</a>
    </div>
    <div v-else>
      <h1 class="error__code">{{ statusCode }}</h1>
      <p class="error__message">Oops! Parece que tivemos um problema.</p>
      <p class="error__message">Atualize a página para tentar novamente</p>
    </div>
  </div>
</template>

// Adicionar esse script ao arquivo error.vue
<script>
export default {
  props: {
    error: {
      type: Object
    }
  },
  computed: {
    statusCode() {
      return this.error.statusCode;
    }
  },
  head() {
    return {
      title: this.statusCode
    };
  }
};
</script>
Enter fullscreen mode Exit fullscreen mode

Tela de erro - status 500

É isso! Com um simples layout de erro, conseguimos lidar com o erro 404 Status Code e com o 500 Status Code.
Podemos melhorar essa página usando componentes para lidar com cada erro ou utilizar computed properties no lugar dos textos em vez de usar condicionais, fica a critério.

Abraços e até a próxima! 🌵

Top comments (3)

Collapse
 
zoldyzdk profile image
Hewerton Soares

Ótimo conteúdo!

Collapse
 
cherryramatis profile image
Cherry Ramatis

Recentemente escrevi um artigo sobre error handling tbm,mto interessante ver no ecossistema js primo <3

Collapse
 
phenriquesousa profile image
Pedro Henrique

Obrigado por isso, primo <3