2012-07-25 67 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上)工作正常,没有上述技巧。