Apply middleware to route groups in NuxtJs with a global middleware

In the realm of web development, crafting robust and efficient middleware solutions is paramount. It's the backbone of ensuring seamless user experiences and enhancing the security of web applications. However, as our projects grow, so do the complexities. One common challenge developers face is efficiently applying middleware to groups of routes. This is particularly evident when dealing with authentication, where multiple routes often necessitate the same middleware logic.

Nuxt 3, the progressive Vue.js framework, has recognized this challenge and provided a compelling solution through its global middleware feature. In this blog post, we'll delve into a real-world problem and explore how Nuxt 3's global middleware, named kernel, revolutionizes the way we manage routes.

The Problem: Middleware and Grouped Routes

Consider a scenario where you have a set of routes falling under the admin/ namespace. Applying middleware individually to each route is tedious and error-prone. Additionally, the conventional approach of checking for routes within middleware can kill reusability, making maintenance a nightmare.

Enter Nuxt 3's Global Middleware: The Kernel

Nuxt 3 comes to the rescue with its global middleware, aptly named kernel. Let's take a look at a practical example. Imagine you want to authenticate users and verify their admin permissions for a group of routes falling under admin/. In the previous versions, this would involve cumbersome checks within middleware or applying middleware globally, which might not be desirable.

With Nuxt 3's kernel.js, you can streamline this process significantly. Here's how you can do it:

import auth from "~/middleware/auth";
import admin from "~/middleware/admin";

export default defineNuxtRouteMiddleware(async (to, from) => {
  const currentRoute = to.fullPath;

  if (currentRoute.includes("/dashboard")) {
    // Check for admin group first, ensuring proper routing logic
    if (currentRoute.includes("/admin")) {
      return admin(to, from);
    return auth(to, from);

In this code snippet, the kernel middleware checks the route paths. If a route falls under the /dashboard namespace, it further discerns whether it's an /admin route or not. Based on this information, the appropriate middleware (auth or admin) is applied seamlessly.

Read also : Apply middleware to route groups in NuxtJs in Nuxt config.

Advantages of the Nuxt 3 Kernel Middleware

  1. Simplicity: The logic is clean and concise, making it easy to understand and maintain.

  2. Reusability: Middleware logic can be reused efficiently across multiple routes, enhancing the development process.

  3. Scalability: As your project grows, managing complex route structures becomes effortless, ensuring scalability and flexibility.

  4. Error Prevention: With a centralized approach, the chances of missing out on applying middleware to specific routes are significantly reduced, minimizing errors.


Nuxt 3's kernel middleware exemplifies the framework's commitment to simplifying complex tasks. By allowing developers to manage groups of routes efficiently, it enhances the overall development experience. As you embark on your next web development journey, consider harnessing the power of global middleware to streamline your route management and deliver exceptional user experiences.

Read also : Handling Missing Route Models and fallback in Laravel.