我最近开始使用Node.js,而在app.js文件中有这一行代码:
app.use(express.favicon());
现在,我该如何设置自己的自定义favicon.ico图标?
我最近开始使用Node.js,而在app.js文件中有这一行代码:
app.use(express.favicon());
现在,我该如何设置自己的自定义favicon.ico图标?
安装favicon middleware,然后执行以下操作:
var favicon = require('serve-favicon');
app.use(favicon(__dirname + '/public/images/favicon.ico'));
或者更好的方法是使用 path
模块:
app.use(favicon(path.join(__dirname,'public','images','favicon.ico')));
请注意,此解决方案同样适用于Express 3应用程序。
根据API,.favicon
接受一个位置参数:
app.use(express.favicon("public/images/favicon.ico"));
app.use(express.favicon(__dirname + '/public/images/favicon.ico'));
或者更好的方法是使用path
模块(正如Druska建议的那样):
app.use(express.favicon(path.join(__dirname, 'public','images','favicon.ico')));
根据 包描述:
ETag
。Content-Type
进行服务。path.join(__dirname, "public")
会导致字符串连接而没有分隔符?样本越小,我们就能越快地解决这个问题(所以如果可以,请只提供join部分)。 - Benjamin GruenbaumContent-Type
。您可以在此处查看它的操作方式here。您认为将此编辑到答案中有价值吗? - Benjamin Gruenbaum无需额外的中间件。只需使用:
app.use('/favicon.ico', express.static('images/favicon.ico'));
Content-Type
。 - maxkoryukovapp.use(express.static("dist"));
,可以从“dist”文件夹中提供所有js、img和css文件的服务,如/img/some_image.png
或/js/my_file.js
,以及在<head>
标签中的<link rel="shortcut icon" href="/img/favicon.ico">
。但是在Azure上的Node/MongoDB应用程序中仍然会出现404错误,失败的请求为GET /favicon.ico
。这是解决方案吗:app.use(express.static("dist"));
后面跟着app.use('/favicon.ico', express.static('/img/favicon.ico'));
?编辑:我在本地环境中尝试过这个方法,结果http://localhost:3000/favicon.ico
返回Cannot GET /favicon.ico
。 - user1063287app.use('/favicon.ico', express.static('dist/img/favicon.ico'));
,在我的现有app.use(express.static("dist"));
之上。 - user1063287不需要自定义中间件?! 在express中:
//you probably have something like this already
app.use("/public", express.static('public'));
然后将您的网站图标放在public文件夹中,并在HTML文件的标签中添加以下行:
<link rel="icon" href="/public/favicon.ico">
../public/favicon.ico
。 - Oliver Dixon防止错误的笑脸网站图标:
//const fs = require('fs');
//const favicon = fs.readFileSync(__dirname+'/public/favicon.ico'); // read file
const favicon = new Buffer.from('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/
最后替换图标的base64值即可。
如何创建个性化的网站小图标
使用Photoshop或Inkscape制作图标,可能需要先使用Inkscape,然后在Photoshop的图像->调整菜单中进行色彩校正和增强。
如果需要快速制作图标,可以前往http://www.clker.com/选择一些矢量图形,并下载为SVG格式。然后将其导入到Inkscape (https://inkscape.org/) 中,更改颜色或删除部分内容,也可以从另一个矢量图形中添加一些元素。最后选择要导出的部分,点击文件->导出,选择像16x16这样的大小用于制作网站小图标,128x128或256x256用于进一步编辑。ICO文件可以包含多个图标尺寸,除了16x16像素的小图标外,还可以包含高质量的链接图标。
最后可能需要在Photoshop中对图像进行进一步增强,如色彩增强、斜角效果或圆形遮罩等。
然后将该图像上传到生成网站小图标的其中一个网站上。也有一些Windows程序可用于编辑图标,如https://sourceforge.net/projects/variicons/。
要将网站小图标添加到网站中,只需将favicon.ico作为一个文件放在域的根目录中即可。例如,在Node.js中,可以将其放置在包含静态文件的public文件夹中。它不必像上面的代码那样特别,只需要是一个简单的文件即可。
app.use(express.favicon(__dirname + '/public/images/favicon.ico'));
我在本地运行时没有使用__dirname +
,但是在我的部署服务器上无法使其工作。
app.use(express.favicon('./public/images/favicon.ico'));
。 - Alexis Diel<link rel="icon" href="/images/favicon.ico" type="image/x-icon">
即可,无需其他任何内容。请确保您的图像文件夹位于公共文件夹中。127.0.0.1
而不是localhost
,出于某种原因,这对我有用。 - cprcrack如果以上两种方法都不起作用,您可以尝试以下方法!
确保您的favicon.ico文件在public/icons目录下或相应更改路径。
如果未导入路径,
const path = require('path') ;
app.get("/favicon.ico", (req, res) => {
return res.sendFile(path.join(__dirname + "/public/icons/favicon.ico"));
});
如果您想要一个不涉及外部文件并且不使用express.static
的解决方案(例如,一个超轻量级的单文件Web服务器和网站),您可以使用serve-favicon
并将您的favicon.ico
文件编码为Base64。像这样:
const favicon = require('serve-favicon');
const imgBuffer = new Buffer.from('IMAGE_AS_BASE64_STRING_GOES_HERE', 'base64');
// assuming app is already defined
app.use(favicon(imgBuffer));
IMAGE_AS_BASE64_STRING_GOES_HERE
替换为将您的网站图标文件编码为Base64的结果。有很多在线网站可以完成这个过程,您可以搜索一下。In app.js:
app.use(express.static(path.join(__dirname, 'public')));
<link rel='icon' href='/images/favicon.ico' class='js-favicon'>
这在一个使用以下命令自动生成的项目中运行良好:
express my-project
app.use(express.favicon())
会得到以下提示:大多数中间件(如 favicon)不再与 Express 捆绑在一起,必须单独安装。请参阅 github.com/senchalabs/connect#middleware。或者,您可以使用以下代码来禁用 favicon:app.get('/favicon.ico', (req, res) => res.status(200))
Express js prevent GET /favicon.ico - user