web-dev-qa-db-ja.com

ノードhttp-serverは、あらゆるリクエストにindex.htmlで応答します

インストール済みhttp-serverグローバル。

myDirからlocalhostポート8080で起動します。myDirindex.html

(ブラウザから)リクエストした場合http://localhost:8080/ index.htmlを取得しましたが、これで問題ありません。

私がリクエストした場合http://localhost:8080/anythingサーバーから応答がありません。

それとは対照的に、私のサーバーは、ポート8080のlocalhostに到達するすべてのhttpリクエストに対して、常にindex.htmlで応答します。

これは可能ですか?.

前もって感謝します

13
Picci

あなたが求めていることを達成するために、http-serverの代わりに live-server をお勧めします。

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

ライブサーバーもホットリロードを提供していますが、それはあなたのリクエストの1つではありませんでした

編集:live-serverは、本番環境で使用するように設計されていません。たとえばgzip圧縮なし

編集2:http-serverのメンテナーは明確に言った このコメントで 決して、http-serverはSPAのユースケースを考慮しない

編集3: serve も良いオプションのようです

6
Gabriel

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を使用するのとほぼ同じくらい簡単です。

5
Jaime Gómez

はい、あります。-P/--proxyオプション:

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

anyエラー(404を含む)は、パスが欠落しているだけでなく、インデックスにリダイレクトされることに注意してください。

4
DrakaSAN

このような特定のケースでは、独自のサーバーを作成するのは簡単です。

'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
rsp