10

私は node.js の初心者で、ejs レイアウトで Express を使用しています。ページを作成するときに .html 拡張子を取り除く方法を知りたいです。たとえば、自分の localhost:3000/about.html にアクセスした場合 - これは機能しますが、/about として表示されるようにしたいと考えています。また、ファビコンをエクスプレスデフォルトからすばやく変更する方法を誰かが知っている場合、ファビコンを変更する方法を理解するのに苦労しています.

どんな助けでも大歓迎です。

4

3 に答える 3

30

(この質問は古いものですが、Google の検索結果の上位に表示され、受け入れられた回答は最善の解決策ではありません。)

Express.jsで静的コンテンツを提供するための最適なソリューションは、 express.staticです。URL でファイル拡張子を指定する必要がないようにするには、静的ファイルを検索するときに使用するデフォルトのファイル拡張子のリストを使用して構成できます。

app.use(express.static(pathToBaseFolderOfStaticContent, {
    extensions: ['html', 'htm'],
    ... // Other options here
}));

これは、必要なhttp://www.example.com/somePageへの GET リクエストに応答して、 pathToBaseFolderOfStaticContent /somePage.htmlまたはpathToBaseFolderOfStaticContent/somePage.htmを提供します。たとえば、https: //arcade.ly/star-castle にアクセスすると、提供されるファイルはstar-castle.htmlという静的ファイルにすぎません。このための特別なルーティングやその他の静的ファイルを追加する必要はありませんでした - それはすべてexpress.staticによって処理されます。

サーバー上でアクティブな作業を返す必要があるコンテンツの特定のルートを追加するだけで済みます。ここでの大きな利点は、CDN を使用してより多くのコンテンツ (社内の基幹業務アプリを実行している場合は nginx) をキャッシュできるため、サーバーの負荷が軽減されることです。

もちろん、デフォルトのファイル拡張子はいくつでも設定できますが、私はリストを短くする傾向があります。URL がアドレス バーに表示される可能性が高いリソース (常にではありませんが、通常は HTML ファイルを意味します) にのみ使用します。

Express.js を使用した静的コンテンツの提供に関する次のドキュメントをご覧ください。

これは、既定のファイル拡張子を静的コンテンツ要求に関連付ける一般的な方法は何ですか?で回答されています。.

favicon.icoの問題は、静的コンテンツを提供するルート フォルダーに favicon をドロップすることで解決できます。また、ドキュメント<link>のを使用して参照する +Costa のソリューションを実装することもできます<head>

理論的には、ファビコンをルート フォルダーに配置する必要はありませんが、実際には、一部のブラウザーは<head>、ドキュメントの で参照されていても、サイト ルートからそれを要求します。これにより、偽の 404 エラーが発生し、クライアント側のデバッグ ツール (Chrome 開発ツールなど) で確認できます。

于 2016-06-23T11:52:32.783 に答える
-1

通常、Favicon の問題はキャッシュの問題です。ベース HTML レイアウトにこのコードがある限り:

<link rel="shortcut icon" type="image/x-icon" href="/images/favicon.ico">

次に、ブラウザでその画像がある場所に移動するだけで、キャッシュが強制的に更新されます。

于 2013-05-14T05:16:29.093 に答える
-3

私はそれを考え出した。この投稿を見ました Render basic HTML view? 私が抱えていた問題を解決しました。

app.engine('html', require('ejs').renderFile);    

app.get('/', function(req, res){
  res.render("index.html");
});

そして、これはすべて app.js または実行中のファイルに含まれます。

于 2013-05-14T04:05:33.730 に答える