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

187
Views
Express sirva archivos estáticos en la aplicación Vue 2

Tengo un problema con el servicio de datos estáticos expresos en el proyecto vue 2 (plantilla simple de paquete web) debido a la diferente estructura de producción y desarrollo.

desarrollo: host local/aplicación

producción: servidor/algún-directorio/aplicación

algún directorio cambia con bastante frecuencia, por lo que se establece dinámicamente en el archivo de configuración.

Mi parte de servicio de server.js:

 if (config.root !== '/') { app.use(`/${config.root}`, express.static(path.join(__dirname))); } app.use('/dist', express.static(path.join(__dirname, 'dist')));

Los archivos JS transpilados están en la carpeta /dist.

Este es el archivo index.html que sirve como punto de entrada de la aplicación:

 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>App Demo</title> </head> <body> <div id="app"></div> <script src="/dist/build.js"></script> </body> </html>

Funciona en desarrollo porque la aplicación está en la raíz.

Pero en la compilación de producción no funciona porque la aplicación se sirve desde la subcarpeta del servidor.

¿Alguna idea de como resolver esto?

Gracias.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Suponiendo que su servidor express js está en la misma carpeta que su aplicación vue:

 const express = require('express'); const path = require('path'); const hostname = 'localhost'; const port = 3000; const app = express(); app.use(express.static(path.join(__dirname, 'dist'))); app.get('*', (req, res) => { res.sendFile(__dirname, '/dist/index.html'); }); app.listen(port, hostname, () => { console.log("Listening at http://%s:%s/", hostname, port); });

¡No olvides crear tu aplicación Vue primero!

over 4 years ago · Santiago Trujillo Report

0

Pero en la compilación de producción no funciona porque la aplicación se sirve desde la subcarpeta del servidor.

La frase "no funciona" no nos dice nada, en realidad. ¿Qué no funciona? ¿Te sale algún error en el cliente? ¿Error en el servidor? ¿Obtienes 404 para HTML? HTML está bien pero 404 para imágenes? No especificaste qué es lo que está mal, así que solo puedo darte algunos consejos generales aquí.

Si crea un enrutador con Express:

 const router = require('express').Router(); router.get('/a', ...); router.get('/b', ...); router.use('/c', express.static(...));

entonces podrá poner toda su aplicación en cualquier ruta secundaria muy fácilmente:

 app.use('/x', router);

donde /x es su prefijo requerido.

Pero también debe asegurarse de que todos sus activos estáticos, como los archivos HTML, no usen rutas absolutas, por ejemplo, cosas como:

 <a href="/a/b/c.html">...</a> <script src="/a/b/c.js"></script>

pero solo rutas relativas como:

 <a href="b/c.html">...</a> <script src="../../a/b/c.js"></script>

etc. Esto también es cierto si deja su aplicación en paz y usa un proxy inverso para agregar el prefijo de ruta requerido, lo que también podría hacer en lugar de jugar con su código de Nodo, y puede ser más fácil en este caso. Para obtener más información sobre proxies inversos con aplicaciones Node, consulte estas preguntas:

  • Nginx no representa correctamente nodejs
  • Procesos Django y Node para el mismo dominio
  • proxy inverso usando ngix y la implementación de ssl en express falló
  • SSL con nodo / IIS
  • ¿Dónde coloco mi aplicación Node JS para que sea accesible a través del sitio web principal?
  • Configuración de HTTPS para Express y Nginx
  • ¿Cómo obtengo el nombre_servidor en nginx para usarlo como una variable de servidor en el nodo?
over 4 years ago · Santiago Trujillo 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!