Escribí el siguiente código:
var express = require('express'); var app = express(); app.use('/', express.static(__dirname )); app.get('/', function (req, res) { res.sendFile('./dist/index.html'); }); app.listen(3000, function() { console.log("Listening on port 3000"); });que no funciona Cuando abro el navegador y voy a "localhost: 3000", aparece el error:
la ruta debe ser absoluta o especificar la raíz para res.sendFile
Por supuesto, una vez que arreglo la línea que comienza con "app.use..." para:
app.use('/', express.static(__dirname + "./dist"));entonces todo funciona bien.
¿Puedes explicar por qué? ¿Qué tiene de malo dar a "express.static" una ruta de una carpeta principal de la carpeta directa del archivo enviado?
Prueba a cambiar el orden. En vez de:
app.use('/', express.static(__dirname )); app.get('/', function (req, res) { res.sendFile('./dist/index.html'); });Probar:
app.get('/', function (req, res) { res.sendFile(path.join(__dirname, './dist/index.html')); }); app.use('/', express.static(__dirname)); // OR: app.use('/', express.static(path.join(__dirname, 'dist'))); Además, use path.join() para unir rutas. Primero debe solicitar la path :
var path = require('path'); Consulte esta respuesta para obtener más información sobre el servicio de archivos estáticos y por qué es importante path.join :
Ahora, su problema no se trataba de express.static sino de res.sendFile . Cuando cambió la ruta express.static a una diferente, es probable que express.static haya encontrado el archivo que deseaba enviar previamente con res.sendFile y el controlador con res.sendFile no se ejecutó en absoluto. Antes del cambio, express.static no encontraba el archivo index.html y pasaba la solicitud al siguiente controlador, que tenía una mala invocación de res.sendFile . Es por eso que apareció para resolver el problema con el error, porque ya no se llamaba al código que causaba el error.