Expressでカスタムファビコンを設定する方法


136

私は最近Node.jsで作業を開始し、app.jsファイルに次の行があります。

app.use(express.favicon());

では、自分のカスタムfavicon.icoを設定するにはどうすればよいですか?


3
ブラウザのキャッシュを適切にクリアしてください。そうしないと、キャッシュが変更されない場合があります
vsync

app.use(express.favicon())Express 4で使用すると、ほとんどのミドルウェア(faviconなど)がExpressにバンドルされなくなったため、個別にインストールする必要があります。github.com/senchalabs/connect#middlewareをご覧ください。または、ファビコンを指定せずに次を指定することもできますapp.get('/favicon.ico', (req, res) => res.status(200)) 。Express js prevent GET /favicon.ico
user

回答:


239

Express 4

faviconミドルウェアをインストールしてから、次の手順を実行します。

var favicon = require('serve-favicon');

app.use(favicon(__dirname + '/public/images/favicon.ico'));

または、pathモジュールを使用して:

app.use(favicon(path.join(__dirname,'public','images','favicon.ico')));

(このソリューションはExpress 3アプリでも機能することに注意してください)

Express 3

APIによると、.favicon場所パラメーターを受け入れます。

app.use(express.favicon("public/images/favicon.ico")); 

ほとんどの場合、(vsyncが示唆するように)これが必要になる場合があります。

app.use(express.favicon(__dirname + '/public/images/favicon.ico'));

さらに良いことに、pathモジュールを使用します(Druskaが提案したとおり):

app.use(express.favicon(path.join(__dirname, 'public','images','favicon.ico'))); 

ファビコン静的よりも優れている理由

パッケージの説明によると:

  1. このモジュールは、アイコンをメモリにキャッシュして、ディスクアクセスをスキップしてパフォーマンスを向上させます。
  2. このモジュールは、ETagファイルシステムプロパティではなく、アイコンのコンテンツに基づいて提供します。
  3. このモジュールは、最も互換性のあるもので提供されContent-Typeます。

1
ありがとう!私がそこで見ることができるように問題を開いていただけませんか?うまくいけば、パスのものだけ、つまりpath.join(__dirname, "public")区切り文字なしで連結された文字列になりますか?サンプルが小さければ小さいほど、これをすばやく修正できます(したがって、結合部分だけを喜ばせることができます)。
Benjamin Gruenbaum 2016

Eduardoによって説明されたより単純な方法の代わりに、(別のミドルウェアを実際には保守しない可能性がある人が保守する)使用する利点は何ですか?
LucaM 2018

3
@LucaMまず第一に-良い質問です!serve-faviconは、私たち(Node.jsファウンデーション)とDoug(Expressを管理する)によって保守されています。つまり、Express自体を作成して保守するのと同じ人が保守しています。理由については、Readmeを参照してください。ただし、基本的には、ロギング、キャッシング、ETag処理、および正しいContent-Typeです。あなたはそれがここで何をするか見ることができます。これを回答に編集することにはメリットがあると思いますか?
Benjamin Gruenbaum

1
ファビコンが提供する機能をクリアしてくれたベンジャミンに感謝します。厳密には必要ではありませんが、私はそれを受け入れられた回答に書き込みます。
LucaM 2018年

36

追加のミドルウェアは必要ありません。ただ使用する:

app.use('/favicon.ico', express.static('images/favicon.ico'));

1
うん、これで十分でしょう。これに対する追加のミドルウェアはやり過ぎのように感じるので、これは正しい答えです。
jlstr

1
@jlstrこれは20行のコードのようなもので、どのようなやりすぎを意味するのでしょうか。))サーバー側なので、小さな依存関係の数は関係ありません。また、前述のミドルウェアは次の機能を提供します。1)メモリキャッシング2)適切なETagの設定3)適切な設定Content-Type
maxkoryukov

18

エラーを防ぐためのスマイリーファビコン:

 //const fs = require('fs'); 
 //const favicon = fs.readFileSync(__dirname+'/public/favicon.ico'); // read file
 const favicon = new Buffer.from('AAABAAEAEBAQAAAAAAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA/4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREQAAAAAAEAAAEAAAAAEAAAABAAAAEAAAAAAQAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAD8HwAA++8AAPf3AADv+wAA7/sAAP//AAD//wAA+98AAP//AAD//wAA//8AAP//AAD//wAA', 'base64'); 
 app.get("/favicon.ico", function(req, res) {
  res.statusCode = 200;
  res.setHeader('Content-Length', favicon.length);
  res.setHeader('Content-Type', 'image/x-icon');
  res.setHeader("Cache-Control", "public, max-age=2592000");                // expiers after a month
  res.setHeader("Expires", new Date(Date.now() + 2592000000).toUTCString());
  res.end(favicon);
 });

上記のコードでアイコンを変更するには

ここにアイコンを作成してくださいhttp : //www.favicon.cc/またはここ:http : //favicon-generator.org

多分ここにそれをbase64に変換します:http//base64converter.com/

次に、アイコンのベース64の値を置き換えます

パーソナライズされたfavアイコンの作成方法に関する一般情報

アイコンは、フォトショップまたはインクスケープを使用して作成されます。おそらく、インクスケープ、次にフォトショップで、鮮やかさと色補正を行います(画像->調整メニュー)

クイックアイコンの場合は、http: //www.clker.com/にアクセスして、いくつかのベクタークリップアートを選択し、svgとしてダウンロードします。次に、それをinkscape(https://inkscape.org/)に持ってきて、色を変更するか、パーツを削除します。別のベクタークリップアートイメージから何かを追加し、エクスポートするパーツを選択して、ファイル>エクスポートをクリックし、16x16のようなサイズを選択します。ファビコンまたは32x32。さらに編集するには、128x128または256x256。icoパッケージには、複数のアイコンサイズを含めることができます。それは、16x16ピクセルのファビコンと共に、ウェブサイトへのリンクのための高品質のアイコンを持つことができます。

次に、フォトショップで画像を強化します。鮮やかさ、ベベル効果、丸いマスクなど。

次に、この画像をファビコンを生成するWebサイトの1つにアップロードします。https://sourceforge.net/projects/variicons/のようなアイコンを編集するためのウィンドウ用のプログラムもあります

ファビコンをウェブサイトに追加します。ドメインのルートフォルダにファイルとしてfavicon.icoを置くだけです。たとえば、静的ファイルを含むパブリックフォルダーのnode.jsにあります。単純なファイルの上のコードのような特別なものである必要はありません。


1
このアプローチが最高です。base64の代わりに提供するファイルを使用しました:fs.createReadStream( "./ public / favicon.ico")。pipe(res);
DaafVader 2017年

2
すでにExpressを使用しているので、なぜExpress.Faviconを使用しないのですか?静的フォルダーを使用できるのに、なぜルート全体を作成するのですか?その上、その魔法のひも(あなたのスマイリー)はあなたのケースをこれ以上良くしません。
SubliemeSiem 2017

1
ファビコンを配置するためのコードは必要ありません。静的ファイルのディレクトリにファイルとして置くだけです。
Shimon Doodkin 2017

16

カスタムミドルウェアは必要ありませんか?!急いで:

 //you probably have something like this already    
app.use("/public", express.static('public')); 

次に、ファビコンを公開し、htmlの頭に次の行を追加します。

<link rel="icon" href="/public/favicon.ico">

1
それがDaafVaderです。これはうまくいきました。私の設定はapp.use(express.static( 'public'))でした。ファビコンをパブリックフォルダー内のimg thatsフォルダーに保存しました。ヘッドセクションのhtmlファイルでは、<link rel = "icon" href = "/ img / favicon.ico">を使用しました。ここで、favicon.icoは私のファビコンのファイル名です。
Nhon Ha

8
app.use(express.favicon(__dirname + '/public/images/favicon.ico')); 

私はそれなしでローカルで動作させて__dirname +いましたが、展開したサーバーで動作させることができませんでした。


試すapp.use(express.favicon('./public/images/favicon.ico'));
アレクシス・ディール


4

静的パスを設定している場合<link rel="icon" href="https://stackoverflow.com/images/favicon.ico" type="image/x-icon">は、ビューでを使用してください。他には何も必要ありません。パブリックフォルダー内に画像フォルダーがあることを確認してください。


1
開発中にGoogle Chrome 127.0.0.1ではなくを使用していることを確認localhostしてください。なんらかの理由で修正されました。
cprcrack

1

express-faviconミドルウェアをインストールします。

npm install express-favicon --save

次のように使用します。

const favicon = require('express-favicon');
app.use(favicon(__dirname + 'favicon.ico'));

1

ファビコンを提供するには、ミドルウェアをインストールする必要があります。

私は今これを試しました:

app.use(express.favicon(path.join(__dirname, 'public','images','favicon.ico'))); 

そしてこのエラーメッセージを取り戻しました:

エラー:ほとんどのミドルウェア(ファビコンなど)はExpressにバンドルされなくなったため、個別にインストールする必要があります。参照してください https://github.com/senchalabs/connect#middlewareを

私たちはそれを決定的なものとして捉えることができると思います。


0

以下のコードは機能します。

var favicon = require('serve-favicon');

app.use(favicon(__dirname + '/public/images/favicon.ico'));

ブラウザを更新するか、キャッシュをクリアしてください。


0

ステップ0:以下のコードをapp.jsまたはindex.jsに追加します

app.use("/favicon.ico", express.static('public/favicon.ico'));

ステップ1:ここからhttps://icons8.com/からアイコンをダウンロードするか、独自の
ステップを作成します2:https : //www.favicongenerator.com/に移動します
ステップ3 :ダウンロードしたicon.pngファイルをアップロード> 16pxを設定> faviconを作成>ダウンロード
ステップ4:ダウンロードフォルダーに移動し、[。icoファイル]を見つけて、名前をfavicon.icoに変更します
ステップ5:favicon.icoをパブリックディレクトリにコピーします
ステップ6 を作成しました。以下のコードを.pugファイルのheadタグの下、titleタグの下に追加します

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

手順7:保存>サーバーを再起動>ブラウザーを閉じる>ブラウザーを再度開く>ファビコンが表示される

注:ファビコン以外の名前を使用できますが
            、コードとパブリックフォルダーで名前を変更してください。


0

app.jsの場合:

app.use(express.static(path.join(__dirname, 'public')));

アイコンが「/public/images/favicon.ico」にあると想定して、htmlのヘッドに次のリンクを追加します。

<link rel='icon' href='/images/favicon.ico' class='js-favicon'>

これは、次のコマンドで自動生成されたプロジェクトで正常に機能しました。

express my-project

0

外部ファイルを含まず、使用しないソリューションが必要な場合express.static(たとえば、超軽量の1ファイルのWebサーバーおよびサイト)serve-faviconfavicon.icoファイルをBase64として使用およびエンコードできます。このような:

const favicon = require('serve-favicon');
const imgBuffer = new Buffer.from('IMAGE_AS_BASE64_STRING_GOES_HERE', 'base64');
// assuming app is already defined
app.use(favicon(imgBuffer));

IMAGE_AS_BASE64_STRING_GOES_HEREファビコンファイルをBase64としてエンコードした結果に置き換えます。オンラインで検索できるサイトはたくさんあります。

サーバーやブラウザを再起動して動作することを確認しlocalhost、ハードリフレッシュ/ブラウザキャッシュをクリアしてWebで動作することを確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.