Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

352
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!