【问题标题】:Unable to Change Favicon with Express.js无法使用 Express.js 更改网站图标
【发布时间】:2012-07-24 08:59:46
【问题描述】:

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

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

我仍然得到默认的网站图标。这是在我的app.configure 函数中,是的,我已经验证/public/images/favicon.ico 中有一个favicon.ico。在控制台中也没有关于favicon.ico 的内容,这让我相信这行代码被忽略了。函数中的其他所有内容(设置端口、设置视图目录、设置模板引擎等)似乎都工作正常,那么为什么这行代码不会执行?

我尝试了什么

  • 清空浏览器缓存
  • 重启终端并再次运行node app.js
  • 添加{ maxAge: 2592000000 },如here 所述

提前致谢。

更新:我让它工作了。有关详细信息,请参阅下面的答案。

【问题讨论】:

    标签: node.js express favicon


    【解决方案1】:

    您是否尝试过清除浏览器的缓存?也许旧的 favicon 仍在缓存中。

    【讨论】:

      【解决方案2】:

      我第一次尝试在 Safari 中访问该网站(我通常使用 Chrome)并注意到它显示了正确的网站图标。我尝试再次(两次)清除 Chrome 中的缓存无济于事,但经过更多搜索,我发现 apparently favicons aren't stored in the cache。我使用here 描述的方法“刷新了我的网站图标”,它奏效了!

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

      1. 打开 Chrome/有问题的浏览器
      2. 直接导航到 favicon.ico 文件,例如http://localhost:3000/favicon.ico
      3. 按 F5 或相应的浏览器刷新(重新加载)按钮刷新 favicon.ico URL
      4. 关闭浏览器并打开您的网站 - 瞧,您的网站图标已更新!

      【讨论】:

      • 我不敢相信这不在模块 serve-favicon 的文档中。似乎非常重要,特别是考虑到这个答案有 41 个赞成票。感谢您链接到这些资源!
      • 为此 +1。奇迹般有效!整整一个星期都在忙。任何形式的浏览器缓存清除都行不通。
      • “这里描述的方法”链接对我来说已经死了..描述方法本身怎么样?我在下面添加了一个对我有用的答案。
      • @joedotnot 链接仍然适用于我。但是,我用方法本身更新了答案。
      • 由于答案包括关闭浏览器,我从字面上复制了答案的链接以便稍后对其进行投票。
      【解决方案3】:

      最后对我有用的是什么:

      看看

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

      位于应用配置功能的开头。最后我之前有过。正如 Express 文档所说:“使用 app.use()“定义”中间件的顺序非常重要,它们是按顺序调用的,因此这定义了中间件的优先级。'

      我不需要设置任何 maxAge。

      测试它:

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

      【讨论】:

      • 使用未经任何修改的全新应用:app.use(express.favicon('public/images/favicon.ico'));
      • 如果您是从模板开始的,请确保您替换了任何以前的 app.use(express.favicon()); 实例。我发现当它被复制时它不能正常工作。
      • express.favicon 不再与 express 4 一起使用,请参阅错误错误:大多数中间件(如 favicon)不再与 Express 捆绑在一起,必须单独安装。你需要github.com/expressjs/serve-favicon
      • 您的回答已过时。实际上应该这样做。正确的解释可以在这里找到。 stackoverflow.com/a/15463231/865603
      【解决方案4】:

      如何在没有快递的情况下做到这一点:

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

      【讨论】:

        【解决方案5】:

        以上答案不再有效

        如果你使用

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

        【讨论】:

        【解决方案6】:

        防止错误的笑脸图标:

         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/

        然后替换图标 base 64 值

        如何创建个性化收藏图标的一般信息

        图标是使用 Photoshop 或 inkscape 制作的,可能是 inkscape,然后是 photoshop 以进行鲜艳度和色彩校正(在图像->调整菜单中)。

        快速图标转到 http://www.clker.com/ 并选择一些矢量剪贴画,然后下载为 svg。 然后将其带到inkscape并更改颜色或删除部分,也许从另一个矢量剪贴画图像中添加一些东西,然后导出选择要导出的部分并单击文件>导出,选择大小如16x16为favicon或32x32,进一步编辑128x128或256x256 . ico 包内部可以有多种图标大小。它可以与 16x16 像素的收藏图标一起为网站链接提供高质量的图标。

        然后也许可以增强 Photoshop 中的图像。像 vibrance bivel 圆形面具,任何东西。

        然后将此图片上传到生成网站图标的网站之一。 还有一些用于编辑图标的 windows 程序(搜索“windows icon editor opensource”,了解我们如何在一个图标中创建两个不同大小的图像)。

        将网站图标添加到网站。只需将 favicon.ico 作为文件放在您的根域文件文件夹中即可。例如,在包含静态文件的公用文件夹中的 nodejs 中。它不必像上面的代码之类的特殊文件,只是一个简单的文件。

        【讨论】:

          【解决方案7】:

          对我有用的方法如下。设置 express 以照常服务您的静态资源,例如

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

          将网站图标放在您的公共文件夹中;然后为您的图标 url 添加一个查询字符串,例如

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

          在这种情况下,Chrome 是行为不端的浏览器; IE。火狐。 Safari(全部在 Windows 上)运行良好,没有上述技巧。

          【讨论】:

            【解决方案8】:

            我能想到的最简单的方法(当然,仅对本地开发人员有效)是将服务器托管在不同的端口上

            PORT=3001 npm run start

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-08-12
              • 1970-01-01
              • 2010-09-20
              • 2020-06-05
              • 2022-08-18
              相关资源
              最近更新 更多