Logo

dev-resources.site

for different kinds of informations.

Middlewares: O que são e como utilizar no Nuxt.JS

Published at
1/14/2025
Categories
vue
frontend
javascript
webdev
Author
thiagonunesbatista
Categories
4 categories in total
vue
open
frontend
open
javascript
open
webdev
open
Author
18 person written this
thiagonunesbatista
open
Middlewares: O que são e como utilizar no Nuxt.JS

O que são Middlewares?

No Front-end, os Middlewares são blocos de códigos que são executados antes que a navegação para uma nova página aconteça, permitindo realizar diversos controles na nossa aplicação, como:

  • Autenticação: verifica se o usuário está logado, caso contrário, é redirecionado para a tela de login.
  • Permissão: verifica se o usuário tem as permissões de acessar aquela página, caso não tenha, ele é redirecionado para alguma página que tenha permissão.
  • Logs: salvar informações sobre informações da página.

Os Middlewares funcionam como uma camada intermediária, atuando desde o início do carregamento da página até a sua renderização completa.

Essa funcionalidade de middlewares está presente em frameworks modernos do Front-end como Next.js e Nuxt.JS.

Neste artigo, vou te ensinar como implementar os Middlewares de rota no Nuxt.JS.

Middlewares de uma forma não tão técnica

Image description

Para explicar de forma mais simples, vou utilizar uma analogia:

Imagine que você quer entrar em uma festa, e nesse processo você vai passar por três funcionários da segurança da festa, que são os "middlewares", e cada um vai ser responsável por fazer uma ação específica.

  1. O primeiro segurança vai verificar se você possui um ingresso e se é válido, semelhante a um middleware de autenticação, caso não possua o ingresso, você vai ser redirecionado para a bilheteria ou tela de login.

  2. O segundo segurança vai conferir se você é maior de idade, requisito essencial para acessar a festa, semelhante a um middleware de permissão. Se você não tiver a permissão necessária para entrar, será redirecionado para fora da fila da festa.

  3. O terceiro e último segurança vai te dar uma pulseira de identificação que sinaliza se você possui acesso à área vip da festa, semelhante aos middlewares que podem adicionar dados em requisições.

Por fim, após passar por todas as etapas anteriores, você estará livre para acessar o salão da festa.

Tipos de Middlewares

No Nuxt.js temos os seguintes tipos de Middlewares:

  • Globais
  • Inline ou Anônimos
  • Nomeados
  1. Os Middlewares globais são criados dentro da pasta /middleware e são executados em todas as páginas. É necessário adicionar o sufixo global.
/*
  Exemplo de middleware Global:
  Esse middleware verifica se a URL/rota buscada existe.
  Caso não exista o usuário é redirecionado para página de links.

  Nome e Diretório do arquivo:
  /middleware/notFound.global.js
*/

export default defineNuxtRouteMiddleware((to) => {
  const hasFoundRoute = to.matched.length > 0;

  if (!hasFoundRoute) {
    return navigateTo({
      path: "/links"
    });
  }
});
Enter fullscreen mode Exit fullscreen mode
  1. Os Middlewares inline ou anônimos são middlewares específicos para uma página, definidos diretamente dentro do arquivo da página no Nuxt; Isso limita a reutilização do código, visto que ele não pode ser facilmente compartilhado com outras páginas.
/*
  Exemplo de middleware inline:
  Esse middleware verifica se os dados estão presentes na store.
  Caso não esteja, os dados serão requisitados.
*/

<script setup lang="ts">
import { useStore } from 'vuex';

definePageMeta({
  middleware: [
    async function (to, from) {
      const store = useStore();
      if (!store.state.user) {
        await store.dispatch("fetchUser");
      }
    },
  ],
});
</script>
Enter fullscreen mode Exit fullscreen mode
  1. Os Middlewares nomeados são criados dentro da pasta /middleware.
/*
  Exemplo de middleware Nomeado:
  Esse middleware verifica o usuário está logado.
  Caso não esteja logado, ele é redirecionado para página de login.

  Nome e Diretório do arquivo:
  /middleware/auth.js
*/

export default defineNuxtRouteMiddleware((to, from) => {
  const { $store } = useNuxtApp();

  if (!$store.auth?.loggedIn) {
    return navigateTo("/login");
  }
});
Enter fullscreen mode Exit fullscreen mode

Nos Middlewares nomeados, é necessário definir quais páginas utilizam determinado middleware, uma das formas de se fazer isso é alterando os arquivos das páginas que vão utilizar aquele middleware:

<script setup>
definePageMeta({
  middleware: "auth-admin"
});
</script>
Enter fullscreen mode Exit fullscreen mode

Também importante dizer que mesmo que você nomeie os arquivos de middleware em padrões como PascalCase ou camelCase, os nomes dos arquivos são normalizados para o padrão kebab-case.

Conclusão

Espero que com esse artigo eu tenha conseguido te explicar de forma simples e rápida os principais pontos de criação e utilização de Middlewares no Nuxt.JS 🙋🏻‍♂️.

Se você precisar de mais informações sobre Middlewares no Nuxt.JS, você pode buscar na documentação oficial.

vue Article's
30 articles in total
Favicon
Learning Vue
Favicon
Resolving Auto-Scroll issues for overflow container in a Nuxt app
Favicon
Building a new Chat
Favicon
Creating a scalable Monorepo for Vue - Workspaces
Favicon
Creating a scalable Monorepo for Vue - Intro
Favicon
How to Load Remote Components in Vue 3
Favicon
Middlewares: O que são e como utilizar no Nuxt.JS
Favicon
Sore Throat: Causes, Symptoms, and Treatment
Favicon
Transform Your Web Development Workflow with These JavaScript Giants
Favicon
Integrate Storybook with VueJS
Favicon
Why JSX/TSX Isn't Cool
Favicon
We released AdminForth Components Library
Favicon
JSON Visual Edit
Favicon
How to create perfect CSS circle sectors
Favicon
Shady QR Code Generator Pages? Ugh!
Favicon
I Built a CaddyFile Generator Tool in Just 8 Hours – Here’s How It Went
Favicon
How to setup VueJs in Neovim (January 2025)
Favicon
Corello, Simple Dtos in FrontEnd
Favicon
The easiest way to migrate from Nuxt 3 to Nuxt 4!
Favicon
Vike - Next.js & Nuxt alternative for unprecedented flexibility and dependability
Favicon
Creating a Scroll-Spy Menu with Nuxt 3 and Intersection Observer API
Favicon
vue project
Favicon
Vue.js Fetch API | Search Vue.js | Sort Vue.js | Pagination Vue.js | Filter Vue.js
Favicon
[Boost]
Favicon
Testing Vue components with Vitest
Favicon
How can VoidZero be commercialized?
Favicon
romantic-cannon-lpg3yr
Favicon
Building a Vue CRUD App with a Spring Boot API
Favicon
Vue 3 Slowly Turning Into React? (I'm Honestly confused.)
Favicon
Angular vs. React vs. Vue

Featured ones: