`express.static ()` sigue enrutando mis archivos desde la ruta

Mientras trabajo en un proyecto Express, estoy tratando de usar un objeto express.Router para manejar las rutas de mi aplicación. En mi archivo de aplicación principal, he agregado una ruta estática para todos mis archivos estáticos (css, javascript, html).

app.js

 var express = require('express'); var io = require('socket.io')(app); var bodyParser = require('body-parser'); var router = require('./include/router'); var app = express(); app.use('/', router); app.use(express.static(__dirname + '/public')); app.use(bodyParser.json()); io.on('connection', function(socket) { }); app.listen(3000); 

router.js

 var express = require('express'); var path = require('path'); var router = express.Router(); router.get('/', function(req, res) { res.sendFile('/html/index.html'); }); module.exports = router; 

Cuando trato de acceder a localhost:3000 obtengo un Error: ENOENT, stat 'C:\html\index.html' 404 Error: ENOENT, stat 'C:\html\index.html'

Además, cuando bash acceder directamente a la ruta estática ( http://localhost:300/html/index.html , creo), pero eso me da Cannot GET /html/index.html .

Este es el árbol de mi carpeta pública.

 público
 ├───css
 ├───hmtl
 |  └───index.html
 Img
 └───js

¿Estoy encaminando esto mal? ¿Cómo puedo arreglarlo?

Debes invertir el orden de tu enrutador.

 app.use('/', router); app.use(express.static(__dirname + '/public')); 

significa que primero se llamará a su enrutador y, si ningún middleware maneja la solicitud, entonces Express llamará a los archivos estáticos, por lo que si coloca primero el middleware estático, el express manejará primero los archivos estáticos.

También se recomienda poner el middleware estático primero.

Para tu problema debes probar esto:

 app.use(express.static(__dirname + '/public/html')); app.use(express.static(__dirname + '/public')); app.use('/', router); 

Express probará primero los archivos estáticos en la carpeta pública / html, luego en el rest (incluido el público / html), prefiero colocar los archivos html en la raíz de la carpeta pública o tal vez en una carpeta diferente (por ejemplo, public-html, static-html )

    Intereting Posts