Next.js Discord

Discord Forum

How can i have multiple middlewares run for the same route?

Answered
Arboreal ant posted this in #help-forum
Open in Discord
Arboreal antOP
So i want to have multiple middlewares, i tried this
export async function middleware(request) {

  if (1 == 1) {
    const requestHeaders = new Headers(request.headers);
    requestHeaders.set("my-url", request.url);
    return NextResponse.next({
    request: {
      headers: requestHeaders,
    },
  });
  }

  if (pathname.startsWith("/dashboard")) {
    return NextResponse.redirect(console.log(new URL("/", request.url)))
  }
}
but i can't have return since the rest of the middlewares wont run since sometimes 2 middlewares have to run for the same route.
Answered by Ray
in this case, just run redirect first
export async function middleware(request) {

  if (pathname.startsWith("/dashboard")) {
    return NextResponse.redirect(new URL("/", request.url))
  }

  if (1 == 1) {
    const requestHeaders = new Headers(request.headers);
    requestHeaders.set("my-url", request.url);
    return NextResponse.next({
    request: {
      headers: requestHeaders,
    },
  });
  }
}
View full answer

9 Replies

@Arboreal ant So i want to have multiple middlewares, i tried this js export async function middleware(request) { if (1 == 1) { const requestHeaders = new Headers(request.headers); requestHeaders.set("my-url", request.url); return NextResponse.next({ request: { headers: requestHeaders, }, }); } if (pathname.startsWith("/dashboard")) { return NextResponse.redirect(console.log(new URL("/", request.url))) } } but i can't have return since the rest of the middlewares wont run since sometimes 2 middlewares have to run for the same route.
in this case, just run redirect first
export async function middleware(request) {

  if (pathname.startsWith("/dashboard")) {
    return NextResponse.redirect(new URL("/", request.url))
  }

  if (1 == 1) {
    const requestHeaders = new Headers(request.headers);
    requestHeaders.set("my-url", request.url);
    return NextResponse.next({
    request: {
      headers: requestHeaders,
    },
  });
  }
}
Answer
@Arboreal ant but will the 2nd one run?
it will when it visit to "/"
@Ray it will when it visit to "/"
Arboreal antOP
so its not possible to run 2 middlewares for the /dashboard route?
@Arboreal ant so its not possible to run 2 middlewares for the /dashboard route?
I don't think its possible from your code example
you are redirecting away
if (!loggedIn && pathname.startsWith("/dashboard")) {
   return NextResponse.redirect(new URL("/", request.url))
} else if (pathname.startsWith("/dashboard")) {
   // I think this is what you want?
  }
@Arboreal ant so its not possible to run 2 middlewares for the /dashboard route?
btw, does 14.2 fix the mysql2 issue?
@Ray btw, does 14.2 fix the mysql2 issue?
Arboreal antOP
yes it did fix it