Búsqueda de sitios web

javascript - Next.js 13 URL actual


En SSR, cuando estoy usando Next.js App Router, ¿cómo puedo obtener la URL completa de la página actual?

No puedo usar window.location.href ya que window no está definido y con useRouter() no puedo obtener la URL completa

Respuesta #1

Crea un middleware.ts (o .js) en la raíz de tu proyecto. (https://nextjs.org/docs/app/building-your-application/routing/middleware)

import { NextResponse } from 'next/server';

export function middleware(request: Request) {
  const requestHeaders = new Headers(request.headers);
  requestHeaders.set('x-url', request.url);

  return NextResponse.next({
    request: {
      headers: requestHeaders
    }
  });
}

entonces usa encabezados en tu diseño o página. (https://nextjs.org/docs/app/api-reference/functions/headers#headers)

const requestUrl = headers().get('x-url')

Respuesta #2

Me doy cuenta de que esto no es una solución aplicable a todos los casos de uso ni una respuesta directa a la pregunta, pero puedes usar el operador spread para obtener todos los parámetros de la URL, sin importar cuántos parámetros haya. Por ejemplo:

/app
  - page.tsx
  - layout.tsx
  /[...slug]
    - page.tsx

En tu /[...slug]

const DetailPage = async ({ params }) => {

  console.log(params.slug)

  return (
    <div>...</div>
  )
}

Entonces www.website.com/hello/there/how/are/you devolverá ['hello', 'there', 'how', 'are', 'you'].

Y entonces podrías reconstruir tu url si conoces tu baseUrl (que supongo que lo harás)