Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

356
Vistas
Remix: ¿patrón de middleware para ejecutar el código antes del cargador en cada solicitud?

¿Existe un patrón recomendado en Remix para ejecutar código común en cada solicitud y posiblemente agregar datos de contexto a la solicitud? ¿Como un middleware? Un caso de uso para esto podría ser realizar un registro o autenticación, por ejemplo.

Lo único que he visto que parece similar a esto es el contexto del cargador a través de la API getLoadContext . Esto le permite completar un objeto de context que se pasa como argumento a todos los cargadores de ruta.

Funciona, e inicialmente parece ser la forma de hacerlo, pero los documentos dicen...

Es una forma de cerrar la brecha entre la API de solicitud/respuesta del adaptador con su aplicación Remix

Esta API es una escotilla de escape, es poco común necesitarla

...lo que me hace pensar lo contrario, porque

  • Esta API es explícitamente para integraciones personalizadas con el tiempo de ejecución del servidor. Pero no parece que los middlewares deban ser específicos del tiempo de ejecución del servidor; solo deberían ser parte del nivel de 'aplicación' como una característica de Remix.

  • ¡Ejecutar middlewares es un patrón bastante común en los marcos web!

Entonces, ¿Remix tiene algún patrón mejor para el middleware que se ejecuta antes de cada cargador?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

En lugar de middleware, puede llamar a una función directamente dentro del cargador, esto también será más explícito. Si desea obtener una respuesta anticipada de esos "middlewares", Remix le permite lanzar el objeto de respuesta.

Por ejemplo, si quisiera comprobar que el usuario tiene un determinado rol, podría crear esta función:

 async function verifyUserRole(request: Request, expectedRole: string) { let user = await getAuthenticatedUser(request); // somehow get the user if (user.role === expectedRole) return user; throw json({ message: "Forbidden" }, { status: 403 }); }

Y en cualquier cargador llamarlo de esta manera:

 let loader: LoaderFunction = async ({ request }) => { let user = await verifyUserRole(request, "admin"); // code here will only run if user is an admin // and you'll also get the user object at the same time };

Otro ejemplo podría ser requerir HTTPS

 function requireHTTPS(request: Request) { let url = new URL(request.url); if (url.protocol === "https:") return; url.protocol = "https:"; throw redirect(url.toString()); } let loader: LoaderFunction = async ({ request }) => { await requireHTTPS(request); // run your loader (or action) code here };
about 4 years ago · Juan Pablo Isaza Denunciar

0

No hay forma dentro de Remix de ejecutar el código antes que los cargadores.

Como descubrió, existe el contexto del cargador, pero se ejecuta incluso antes de que el remix comience a hacer su trabajo (por lo que no sabrá qué módulos de ruta coinciden, por ejemplo).

También puede ejecutar código arbitrario antes de entregar la solicitud para remezclar en el archivo JS donde usa el adaptador para la plataforma en la que está implementando (esto depende del iniciador que usó. Este archivo no existe si ha elegido remezclar servidor como su servidor)

Por ahora debería funcionar para algunos casos de uso, pero estoy de acuerdo en que esta es una característica que falta en el remix por ahora.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Dentro app/root.tsx

 export let loader: LoaderFunction = ({ request }) => { const url = new URL(request.url); const hostname = url.hostname; const proto = request.headers.get("X-Forwarded-Proto") ?? url.protocol; url.host = request.headers.get("X-Forwarded-Host") ?? request.headers.get("host") ?? url.host; url.protocol = "https:"; if (proto === "http" && hostname !== "localhost") { return redirect(url.toString(), { headers: { "X-Forwarded-Proto": "https", }, }); } return {}; };

Fuente: https://github.com/remix-run/remix-jokes/blob/8f786d9d7fa7ea62203e87c1e0bdaa9bda3b28af/app/root.tsx#L25-L46

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda