无法使用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中 。 我使用这里描述的方法“刷新我的图标”,它工作!
这里的方法(从上面的链接修改),以防链接失效:
- 打开Chrome /有问题的浏览器
- 直接导航到favicon.ico文件,例如http:// localhost:3000 / favicon.ico
- 按F5或适当的浏览器刷新(重新加载)button刷新favicon.ico URL
- 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上)工作正常,没有上述的伎俩。