noeud serveur http pour répondre avec index.html à n’importe quelle requête

J’ai installé le http-server globalement.

Je le lance à partir de myDir sur le port localhost 8080. Dans myDir, j’ai index.html .

Si je demande (à partir du navigateur) http://localhost:8080/ I, je reçois index.html, ce qui est OK.

Si je demande cependant http://localhost:8080/anything que http://localhost:8080/anything je ne reçois aucune réponse du serveur.

Ce que je voudrais, au contraire, c’est que mon serveur réponde toujours par index.html à toute requête http atteignant localhost sur le port 8080.

Est-ce possible.

Merci d’avance

Exemple simple et direct avec 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); 

Cette implémentation répondra toujours par index.html si le fichier demandé n’est pas trouvé et qu’il est presque aussi simple que d’utiliser http-server , qui manque de cette option.

Oui, avec l’option -P / --proxy :

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

Notez que toute erreur, y compris 404, sera redirigée vers votre index, pas seulement le chemin manquant.

Pour réaliser ce que vous demandez, je vous recommande de vivre serveur au lieu de serveur http.

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

live-server fournit également un rechargement à chaud, mais ce n’était pas votre requête

Edit: live-server n’est pas conçu pour être utilisé en production. Pas de compression gzip par exemple

Edit 2: Le responsable du serveur http a clairement dit dans ce commentaire que jamais, le serveur http ne tiendra compte des cas d’utilisation de SPA

Edit 3: servir semble être une bonne option aussi

Parfois, pour des cas spécifiques comme celui-ci, il est assez facile d’écrire votre propre serveur:

 'use ssortingct'; 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}/`)); 

Cependant, gardez à l’esprit que si chaque chemin retourne index.html vous ne pourrez plus y faire référence comme des images, des feuilles de style ou des fichiers JavaScript côté client. Non seulement avec le code présenté ci-dessus, mais avec toute solution qui envoie la même réponse ( index.html ) à chaque requête.

Vous devrez peut-être faire des exceptions et ce n’est pas difficile avec Express:

 'use ssortingct'; 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}/`)); 

Gardez simplement à l’esprit que les exceptions doivent aller au sumt, car le premier itinéraire correspondant sera utilisé pour une demande donnée.

Bien sûr, vous devez enregistrer ce code, par exemple sur app.js , installez Express:

 npm install express 

et commencez avec:

 node app.js 

C’est plus compliqué que d’utiliser une solution prête à l’emploi (bien que, comme vous pouvez le constater, pas si compliqué non plus), mais vous avez beaucoup plus de flexibilité quant à la manière dont vous voulez qu’elle se comporte. Il est également facile d’append des journaux, etc.