es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El servicio estático en Express JS no funciona cuando también se utiliza middleware personalizado.

Estoy tratando de escribir un middleware para mi sitio web de express js para poder usar subdominios. También quiero utilizar la servición de imágenes, css y js estáticos. Mis páginas HTML cargan bien pero siempre que intento llamar a un archivo .js, tarda en cargar una página larga y el 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(“miSitioWeb.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);
}
}
});
}

});

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás usando express.static para servir tus activos estáticos, lo cual es bueno. Sin embargo, es posible que el tiempo de carga de página y la falla en la carga de archivos js se deban al orden en que se está ejecutando tu middleware.

    Una posible solución podría ser mover el middleware express.static por encima del middleware que maneja subdominios y enrutamiento dinámico. De esta manera, los activos estáticos se servirán de inmediato sin que ningún otro middleware los procese.

    Aquí hay un fragmento de código actualizado:

    // Servir activos estáticos primero
    app.use('/assets', express.static(path.join(__dirname, 'assets')));
    
    // Manejar subdominios y enrutamiento dinámico
    app.use((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('miSitioWeb.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);
            }
          }
        });
      }
    });
    

    ¡Espero que esto ayude! Avísame si tienes alguna otra pregunta o inquietud.

Comments are closed.