2012-07-25 73 views
46

更改的favicon這是一個非常基本的問題,但我想改變我的Node.js /快速應用程序的圖標與無法與Express.js

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

,我仍然得到默認favicon。這是在我的app.configure功能,是的,我已經驗證,有 a favicon.ico/public/images/favicon.ico。控制檯中沒有任何關於favicon.ico,這導致我相信這行代碼被忽略。函數中的其他部分(設置端口,設置視圖目錄,設置模板引擎等)似乎工作正常,那麼爲什麼這行代碼不能執行?

我試過

  • 清空瀏覽器緩存
  • 重新啓動終端,並再次
  • 運行node app.js添加{ maxAge: 2592000000 },如事先描述here

感謝。

更新:我得到它的工作。有關更多信息,請參閱下面的答案。

回答

65

我第一次嘗試訪問Safari中的網站(我通常使用Chrome),並注意到它顯示正確的圖標。我試圖再次清除Chrome中的緩存(兩次)無濟於事,但經過更多搜索後,我發現apparently favicons aren't stored in the cache。我使用here所述的方法「刷新了我的圖標」,它工作正常!

這裏的方法(從上面的鏈路修改),在情況下,鏈接進入死:

  1. 打開Chrome /直接在瀏覽器有問題
  2. 導航到favicon.ico的文件,例如http://localhost:3000/favicon.ico
  3. 通過按F5或相應的瀏覽器刷新(重新加載)按鈕
  4. 刷新favicon.ico網址關閉瀏覽器並打開您的網站 - 瞧,您的圖標已更新!
+6

我不能相信這不是在模塊服務favicon的文檔。看起來很重要,特別是考慮到這個答案有41個upvotes。感謝您鏈接到這些資源! – ariestav 2016-03-25 15:21:23

+1

對我而言仍然不起作用 – Denny 2016-04-16 20:24:32

+1

+1。奇蹟般有效!整整一週都在忙碌。無論何種形式的瀏覽器緩存清除都不起作用。 – iamcastelli 2016-12-04 10:30:53

0

您是否嘗試清除瀏覽器的緩存?也許舊的圖標仍然在緩存中。

33

什麼,我終於摸索:

看的

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

是在應用程序配置功能的開始。我在結束之前已經完成了它。正如Express文檔所說:'使用app.use()「定義」哪個中間件的順序非常重要,它們是按順序調用的,因此這定義了中間件的優先順序。

我不需要設置任何maxAge。

爲了測試它:

  • 重新啓動與node app.js
  • 清除瀏覽器緩存
  • 服務器直接訪問它刷新網站圖標,通過使用 「本地主機:3000/your_path_to_the圖標/ favicon.ico的」和重裝
+3

使用一個全新的應用程序,無需任何修改使用此:app.use(express.favicon('public/images/favicon.ico')); – Shane 2013-03-12 20:13:26

+0

如果您從模板開始,請確保您替換之前的任何app.use(express.favicon());實例。我發現它重複時無法正常工作。 – 2014-04-17 01:07:48

+1

express.favicon不再與Express 4一起使用,請參閱錯誤錯誤:大多數中間件(如favicon)不再與Express捆綁在一起,必須單獨安裝。你需要https://github.com/expressjs/serve-favicon – Timo 2014-05-31 06:13:38

0

如何做到這一點不明確:

if (req.method == "GET") { 
    if (/favicon\.ico/.test(req.url)) { 
     fs.readFile("home/usr/path/favicon.ico", function(err, data) { 
      if (err) { 
       console.log(err); 
      } else { 
       res.setHeader("Content-Type","image/x-icon"); 
       res.end(data); 
      } 
    }); 
} 
15

以上答案不再有效

如果使用

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

你會得到這個錯誤:

Error: Most middleware (like favicon) is no longer bundled with Express and must be installed separately 

什麼,你會需要做的就是serve-favicon

運行

npm install serve-favicon --save 

然後添加到您的應用程序

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

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

這應該是被接受的答案! 「--save」意味着包含依賴關係,請看這裏:http://stackoverflow.com/questions/19578796/what-is-the-save-option-for-npm-install – Timo 2015-01-22 09:39:34

1

笑臉圖標,以防止錯誤:

var favicon = new Buffer('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值

一般信息如何創建一個個性化的收藏圖標

圖標是使用photoshop或inkscape,也許inkscape然後photoshop進行振動和顏色校正(在圖像 - >調整菜單)。

快速圖標轉到http://www.clker.com/並選擇一些矢量剪貼畫,並下載爲svg。 然後將它帶入inkscape並更改顏色或刪除部分,可能會添加其他矢量剪貼畫圖片中的內容,然後導出選擇要導出的部分,然後單擊文件>導出,爲favicon或32x32選擇16x16的大小,以便進一步編輯128x128或256×256。 ico包內可以有幾個圖標大小。它可以與16x16像素fav圖標一起用於網站鏈接的高質量圖標。

然後可能會增強photoshop中的圖像。像vibrance bivel圓形面具,任何東西。

將圖像上載到網站,其中一個網站上產生favicons。 也有用於編輯圖標的窗口程序(像「windows圖標編輯器開源」一樣的搜索,圖中我們如何在一個圖標內創建兩個不同大小的圖像)。

將favicon添加到網站。只需將favicon.ico作爲文件放入根域文件夾中。例如在包含靜態文件的公用文件夾中的nodejs中。它不必像上面的代碼那樣只是一個簡單的文件。

2

以下是我的工作。例如設置快遞服務您的靜態資源,例如

app.use(express.static('public')); 

將favicon放入公用文件夾;然後添加一個查詢字符串您圖標網址,例如

<link rel="icon" type="image/x-icon" href="favicon.ico?v="+ Math.trunc(Math.random()*999)> 

在這種情況下,Chrome是行爲不當的瀏覽器; IE瀏覽器。 Firefox瀏覽器。 Safari(全部在Windows上)工作正常,沒有上述技巧。