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

153
Vistas
El servicio estático en express js no funciona cuando también se usa middleware personalizado

Estoy tratando de escribir un middleware para mi sitio web express js para poder usar subdominios. También quiero usar imágenes estáticas, css y js. Mis páginas HTML se cargan bien, pero cada vez que trato de llamar a un archivo .js, obtengo un tiempo de carga de página largo y js no se carga.

Cualquier ayuda es apreciada, gracias! :)

 app.use("/assets", express.static(path.join(__dirname, "assets"))); app.get("*", (req, res, next) => { let host = req.get("host").split("."); console.log(req.originalUrl); let url = req.originalUrl.split("/"); url.shift(); console.log(url); if (host.length > 2) { res.send("myWebsite.com"); } else { const pages = Page.getPages(); pages.forEach(page => { if ((url[0] == "" ? "home" : url[0] ?? "home").toLowerCase() == page.name) { if (url.length == 1 || (url.length == 2 && url[1] == "")) { page.publish(res); } } }); }

});

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

0

Entonces, en Pages.html , tienes esto:

 <script type="text/javascript" src="/assets/js/Pages.js"></script>

Parece que generalmente sería compatible con su declaración express.static() (que se muestra a continuación) para cargar Pages.js desde su carpeta assets/js :

 app.use("/assets", express.static(path.join(__dirname, "assets")));

Pero, luego, ese script Pages.js comienza inmediatamente con esto:

 import Page from '../../Page.js';

Eso no funcionará cuando lo solicite el navegador. Recuerde que las rutas en las declaraciones de import de Javascript que se ejecutan en el navegador son relativas a la URL actual de la página web. El navegador intentará combinar esa URL relativa con la URL de la página web y luego solicitará a su servidor esa URL recién construida.

En este caso, terminará con algo como una solicitud de http://somehost/../../Page.js . Pero, no tiene ninguna ruta en su servidor que maneje eso. De forma predeterminada express.static() omite cualquier ruta que contenga ../ porque eso puede ser un problema de seguridad desagradable (permitiendo a los atacantes buscar cosas en el sistema de archivos de su servidor). Por lo tanto, probablemente terminará con un error 404 cuando intente obtener ese archivo.

TODOS los archivos que desea que el navegador pueda cargar, incluidas las importaciones incrustadas en otros archivos JS, deben estar en su carpeta de assets públicos (o en alguna otra carpeta a la que haya habilitado explícitamente el acceso público con algo como express.static() ).

Para tu información, si miras en la consola del navegador, probablemente veas mensajes de error que te habrían indicado dónde buscar el error.

about 4 years ago · Juan Pablo Isaza Denunciar

0

__dirname es una variable de entorno que le indica la ruta absoluta del directorio que contiene el archivo que se está ejecutando actualmente. Debe asegurarse de que el paquete final (su carpeta de activos) esté presente en ese directorio. Intente codificar la ruta absoluta de los activos, si funciona, use el siguiente fragmento en su lugar:

 app.use("/assets", "express.static(process.cwd() + '/assets'));
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