2016-09-28 11 views
7

私はhttp-serverをグローバルにインストールしました。node任意の要求に対してindex.htmlで応答するhttp-server

私はindex.htmlを持ってmyDirにではlocalhostのポート8080でmyDirにからそれを起動します。

私が(ブラウザから)要求すると、​​私はindex.htmlを取得します。これは問題ありません。

もし私がhttp://localhost:8080/anythingを要求しても、私はサーバーから何の応答も得られません。私が望む何

は、逆に、私のサーバーは常にこれが可能であるポート8080

上のローカルホストに到達した任意のHTTPリクエストにindex.htmlをして応答することです。はい、あり、事前

+0

'-Pまたは--proxyプロキシ与えられたURLにローカルで解決できないすべての要求をするものではありませんでした。例:-P http:// someurl.com' => 'http-server -P http:// localhost:8080 /'を試すことができますか? – DrakaSAN

+0

[私の答え](http://stackoverflow.com/questions/39744309/node-http-server-to-respond-with-index-html-to-any-request/39744827#39744827)のソリューションがうまくいったのですあなたのために? – rsp

答えて

4

おかげで、-P/--proxyオプションで:

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

任意のエラーこと、含ま404は、単にパスが欠落していない、あなたのインデックスにリダイレクトします。

+0

残念なことに私があなたの提案をすると、(ブラウザ上で)「このサイトにアクセスできません」というメッセージと「localhostが接続を拒否しました」というメッセージが表示されます。および 'ERR_CONNECTION_REFUSED'。サーバー上では、サーバー自体がエラーをスローする要求ストリームが表示されます。「エラー:ソケットがハングアップしました」 – Picci

+2

「http-server」はわかりませんが、エラーが発生してインデックスにリダイレクトされるため、クライアントが諦めるまでループしていました。 私は個人的には@rspのように、エクスプレスで自分の小さなサーバーを書いていますが、それは簡単で速くもあります。 – DrakaSAN

+1

はい。 'http:// localhost:8080/anything'にアクセスすると' http:// localhost:8080/anything'にリダイレクトされます。 '--proxy'オプションは、ホスト名とポートの後の部分を取り、それを指定されたプロキシホスト/ポートに追加します。 –

3

時には、このような特殊な場合のために、それはあなた自身のサーバー書くのは簡単です:

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

をしかし、すべてのパスがindex.htmlで、その後index.htmlを返す場合は、画像のようなものを参照することができないことに注意してください、スタイルシートまたはクライアントサイドのJavaScriptファイルです。上記のコードだけでなく、すべての要求に同じ応答(index.html)を送信するソリューションを使用してください。

あなたは、いくつかの例外を作成する必要があり、それは、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}/`)); 

ただ、最初にマッチしたルートが特定の要求のために使用されるため、例外がトップに行かなければならないことに注意してください。

もちろん、このコードを保存する必要があります。 app.jsに、Expressのインストール:

npm install express 

をし、それを起動します(あなたが見ることができるようにどちらか、しかしその複雑ではない)それは準備ができて溶液を用いたよりも複雑ですが、あなたは多くを持っている

node app.js 

どのように正確に動作させるかに柔軟性を持たせることができます。これは、ログを追加することも簡単だなど

3

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); 

は、この実装は、常にindex.htmlで応答し、それが使用するのとほとんど同じくらい簡単ですhttp-serverにはこのオプションがありません。

4

http-serverの代わりにlive-serverをお勧めします。

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

ライブサーバーは、ホット・リロードを提供しているが、それはあなたの要求

+0

が機能しません。 httpサーバーがすぐに動作します。 – mythicalcoder

+1

ありがとう - これは私の時間を節約:) –

関連する問題