nodo http-server para responder con index.html a cualquier solicitud

He instalado http-server globalmente.

Lo lanzo desde myDir en el puerto 8080 de localhost. En myDir tengo index.html .

Si solicito (desde el navegador) http://localhost:8080/ obtengo index.html, lo cual está bien.

Si solicito a través de http://localhost:8080/anything , no obtengo ninguna respuesta del servidor.

Lo que me gustaría, por el contrario, es que mi servidor siempre responde con index.html a cualquier solicitud http que llegue a localhost en el puerto 8080.

Es posible.

Gracias por adelantado

Ejemplo simple y directo utilizando Express 4.x :

 var express = require('express'); var app = express(); var path = __dirname + '/public'; var port = 8080; app.use(express.static(path)); app.get('*', function(req, res) { res.sendFile(path + '/index.html'); }); app.listen(port); 

Esta implementación siempre responderá con index.html si no se encuentra el archivo solicitado, y es casi tan simple como usar http-server , que carece de esta opción.

Sí que hay, con la opción -P / --proxy :

 http-server -P http://localhost:8080/ 

Tenga en cuenta que cualquier error, incluido 404, redirigirá a su índice, no solo a la ruta faltante.

Para lograr lo que está pidiendo, le recomiendo el servidor en vivo en lugar del servidor http.

 live-server --port=8080 --entry-file=./index.html 

live-server también proporciona una recarga en caliente pero no fue una de sus solicitudes

Edición: el servidor en vivo no está diseñado para ser utilizado en producción. Sin compresión gzip por ejemplo

Edit 2: El mantenedor de http-server dijo claramente en este comentario que nunca, http-server considerará los casos de uso de SPA

Edición 3: el servicio parece ser una buena opción también

A veces, para casos específicos como este, es bastante fácil escribir su propio servidor:

 'use strict'; var host = '127.0.0.1', port = 3333; var path = require('path'); var app = require('express')(); app.get('*', (req, res) => res.sendFile(path.join(__dirname, 'index.html'))); app.listen(port, () => console.log(`Listening on http://${host}:${port}/`)); 

Pero tenga en cuenta que si cada ruta devuelve index.html , en el index.html no podrá hacer referencia a nada como imágenes, hojas de estilo o archivos JavaScript del lado del cliente. No solo con el código que se muestra arriba, sino con cualquier solución que envíe la misma respuesta ( index.html ) a cada solicitud.

Puede que necesite hacer algunas excepciones y no es difícil con Express:

 'use strict'; var host = '127.0.0.1', port = 3333; var path = require('path'); var app = require('express')(); app.get('/x.png', (req, res) => res.sendFile(path.join(__dirname, 'x.png'))); app.get('*', (req, res) => res.sendFile(path.join(__dirname, 'index.html'))); app.listen(port, () => console.log(`Listening on http://${host}:${port}/`)); 

Solo tenga en cuenta que las excepciones tienen que ir a la parte superior porque la primera ruta coincidente se utilizará para una solicitud determinada.

Por supuesto que necesita guardar este código, por ejemplo, para app.js , instale Express:

 npm install express 

y empezar con:

 node app.js 

Es más complicado que usar una solución preparada (aunque, como puede ver, tampoco es tan complicado) pero tiene mucha más flexibilidad en la forma exacta en que desea que se comporte. También es fácil agregar el registro, etc.