2016-09-28 9 views
7

Ich habe http-server global installiert.Knoten http-Server mit index.html zu jeder Anfrage zu antworten

ich starten Sie es von myDir auf localhost Port 8080. In myDir I index.html haben.

Wenn ich (vom Browser) http://localhost:8080/ anfordern, bekomme ich index.html, was in Ordnung ist.

Wenn ich Anfrage obwohl http://localhost:8080/anything Ich bekomme keine Antwort vom Server.

Was ich möchte, ist im Gegenteil, dass mein Server antwortet immer mit index.html auf jede HTTP-Anforderung auf localhost erreichen Port 8080

dies möglich ist.

Vielen Dank im Voraus

+0

'-P oder --proxy Proxies alle Anfragen, die nicht lokal gelöst werden kann, um die gegebene URL. Beispiel: -P http: // someurl.com' => Könnten Sie versuchen, http-server -P http: // localhost: 8080/'? – DrakaSAN

+0

So funktioniert die Lösung in [meine Antwort] (http://stackoverflow.com/questions/39744309/node-http-server-to-respondd-with-index-html-to-any-request/39744827#39744827) für dich? – rsp

Antwort

4

Ja, es ist, mit dem -P/--proxy Option:

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

Beachten Sie, dass jeder Fehler enthalten 404, zu Ihrem Index umleiten wird, nicht nur Pfad fehlt.

+0

Leider, wenn ich das mache, was Sie vorschlagen, bekomme ich (auf dem Browser) die folgenden Nachrichten "Diese Seite kann nicht erreicht werden" und "localhost weigerte sich zu verbinden." und 'ERR_CONNECTION_REFUSED'. Auf dem Server sehe ich einen Strom von Anfragen, die mit dem Server enden, der selbst einen Fehler wirft. Fehler: Socket auflegen – Picci

+2

Ich weiß nicht, http-Server, aber da jeder Fehler zum Index umgeleitet wird, nehme ich an, Sie haben in einer Schleife, bis der Client aufgegeben hat. Ich persönlich hätte tun müssen, wie @rsp tat, schreiben Sie Ihren eigenen kleinen Server mit Express, es ist auch einfach und schnell. – DrakaSAN

+1

Ja. Der Zugriff auf "http: // localhost: 8080/irgendetwas" würde zu "http: // localhost: 8080/irgendetwas" umleiten und so weiter. Die Option '--proxy' übernimmt den Part nach Hostname und Port und hängt ihn an den angegebenen Proxy-Host/Port an. –

3

Manchmal für bestimmte Fälle wie dieser, ist es einfach genug, um Ihren eigenen Server zu schreiben:

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

Aber denken Sie daran, dass, wenn jeder Pfad index.html kehrt dann in die index.html Sie nicht so etwas wie Bilder verweisen können, Stil Blätter oder clientseitige JavaScript-Dateien. Nicht nur mit dem oben gezeigten Code, sondern mit jeder Lösung, die die gleiche Antwort (index.html) an jede Anfrage sendet.

Unter Umständen müssen Sie auf einige Ausnahmen machen und es ist nicht schwer mit 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}/`)); 

Nur bedenken Sie, dass die Ausnahmen nach oben gehen, weil die erste passende Route wird für eine bestimmte Anforderung verwendet werden .

Natürlich müssen Sie diesen Code z. Express app.js, installieren:

npm install express 

und starten Sie es mit:

node app.js 

Es ist komplizierter als eine fertige Lösung mit (obwohl, wie Sie sehen können, nicht so kompliziert entweder), aber sie haben viel mehr Flexibilität, wie genau Sie sich verhalten wollen. Es ist auch einfach Protokollierung hinzuzufügen usw.

3

Einfach und geradlinig Beispiel mit 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); 

Diese Implementierung wird immer mit index.html reagieren, wenn die angeforderte Datei nicht gefunden wird, und es ist fast so einfach wie mit http-server, die diese Option fehlt.

4

Um zu erreichen, was Sie verlangen, empfehle ich Ihnen live-server anstelle von http-Server.

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

Live-Server bietet auch eine Hot-Reload, aber es war nicht eine Ihrer Anfrage

+0

funktioniert nicht. http-Server funktioniert sofort. – mythicalcoder

+1

danke - das spart mir etwas Zeit :) –

Verwandte Themen