无法使用Express.js更改Favicon

这是一个非常基本的问题,但我试图改变我的node.js / Express应用程序的图标

app.use(express.favicon(__dirname + '/publichttp://img.dovov.comfavicon.ico')); 

我仍然得到默认的图标。 这是在我的app.configure函数中,是的,我已经validation在/publichttp://img.dovov.comfavicon.ico有一个favicon.ico 。控制台中没有关于favicon.ico的任何内容,导致我相信这行代码被忽略了。 所有其他的function(设置端口,设置视图目录,设置模板引擎等)似乎工作正常,那么为什么这行代码不会执行?

我试过了

  • 清空浏览器caching
  • 重新启动terminal并再次运行node app.js
  • 添加{ maxAge: 2592000000 } ,如下所述

提前致谢。

更新:我得到它的工作。 有关更多信息,请参阅下面的答案。

我第一次尝试访问Safari中的网站(我通常使用Chrome),并注意到它显示正确的图标。 我试图再次清除我的caching在Chrome浏览器(两次)无济于事,但更多的search后,我发现显然favicons不存储在caching中 。 我使用这里描述的方法“刷新我的图标”,它工作!

这里的方法(从上面的链接修改),以防链接失效:

  1. 打开Chrome /有问题的浏览器
  2. 直接导航到favicon.ico文件,例如http:// localhost:3000 / favicon.ico
  3. 按F5或适当的浏览器刷新(重新加载)button刷新favicon.ico URL
  4. closures浏览器并打开你的网站 – 瞧,你的图标已被更新!

最后什么对我有效:

看那个

 app.use(express.favicon(__dirname + '/publichttp://img.dovov.comfavicon.ico')); 

是在应用程序configurationfunction的开始 。 我最后还是拿到了 正如Express文档所说:“使用app.use()来定义哪个中间件的顺序非常重要,它们是按顺序调用的,因此这就定义了中间件的优先级。

我不需要设置任何maxAge。

testing它:

  • node app.js重新启动服务器
  • 清除浏览器caching
  • 使用“localhost:3000 / your_path_to_the favicon / favicon.ico”直接访问并刷新Favicon并重新加载

上面的答案不再有效

如果你使用

 app.use(express.favicon(__dirname + '/publichttp://img.dovov.comfavicon.ico')); 

你会得到这个错误:

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

你需要做的是获得服务favicon 。

 npm install serve-favicon --save 

然后将其添加到您的应用程序

 var express = require('express'); var favicon = require('serve-favicon'); var app = express(); app.use(favicon(__dirname + '/publichttp://img.dovov.comfavicon.ico')); 

笑脸图标,以防止错误:

  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/

然后replace图标基础值64

一般信息如何创build个性化的最喜欢的图标

图标是使用Photoshop或Inkscape,也许是Inkscape,然后用Photoshop进行振动和颜色校正(在图像 – >调整菜单中)。

快速图标转到http://www.clker.com/和select一些vector剪贴画,并下载为SVG。; 然后将它带到inkscape并更改颜色或删除部分,也许从另一个vector剪贴画图像添加一些东西,然后导出select要导出的部分,然后单击文件>导出,select大小像16×16的favicon或32×32,进一步编辑128×128或256×256 。 ico包内可以有几个图标大小。 它可以有16×16像素喜欢图标为网站的链接高品质的图标。

那么也许可以提升photoshop中的图像。 像vibrance bivel圆面具,任何东西。

然后将该图像上传到生成图标的网站之一。 也有用于编辑图标的窗口程序(像“Windows图标编辑器开源”一样的search,图我们如何在一个图标内创build两个不同大小的图像)。

将favicon添加到网站。 只需把favicon.ico作为一个文件放到你的根域文件夹中即可。 例如在包含静态文件的公用文件夹中的nodejs中。 它不必像上面的代码那样只是一个简单的文件。

您是否尝试清除浏览器的caching? 也许旧的图标仍然在caching中。

如何做到这一点没有明示:

 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); } }); } 

以下是对我有用的东西。 例如,像往常一样设置快递服务您的静态资源

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

把favicon放到公用文件夹里面; 然后为你的图标url添加一个查询string,例如

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

在这种情况下,Chrome浏览器是不当的行为。 IE浏览器。 Firefox浏览器。 Safari(所有在Windows上)工作正常,没有上述的伎俩。