If we have an Express app that renders templates, we can use the serve-favicon
middleware to serve Favicons.
Favicons are icons on the left side of a browser tab.
In this article, we’ll look at how to use it to display our favorite favicon in users’ browsers.
Why do we need this module?
The serve-favicon
module lets us exclude requests for the favicon in our logger middleware.
It also caches the icon in memory to improve performance by reducing disk access.
In addition, it provides an ETag
based on the contents of the icon, rather than file system properties.
Finally, this module serves with the most compatible Content-Type
.
This module is exclusive for serving the favicon with the GET /favicon.ico
request.
Installation
We can install it by running:
npm install serve-favicon
Options
The favicon
function is provided by this module. It takes 2 arguments, which are path
, and options
and returns a middleware to serve a favicon from the given path
.
The options
object takes one property, which is the maxAge
property. It sets the cache-control max-age
directive in milliseconds. The default is 1 yeat. It also can be a string that’s accepted by the ms
module.
Examples
Simple Usage
The serve-favicon
middleware should come before other middleware so that it won’t conflict with other requests for favicon.ico
.
For instance, we can load a favicon with serve-favicon
as follows:
const express = require('express');
const bodyParser = require('body-parser');
const favicon = require('serve-favicon')
const path = require('path')
const app = express();
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')))
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static('public'));
app.get('/', (req, res) => {
res.sendFile('public/index.html');
});
app.listen(3000);
Then we get:
Setting Max Age
We can also set the maxAge
option as follows:
const express = require('express');
const bodyParser = require('body-parser');
const favicon = require('serve-favicon')
const path = require('path')
const app = express();
const iconPath = path.join(__dirname, 'public', 'favicon.ico');
const options = {
maxAge: 200 * 60 * 60 * 24 * 1000
}
app.use(favicon(iconPath, options));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static('public'));app.get('/', (req, res) => {
res.sendFile('public/index.html');
});
app.listen(3000);
Then we set the expiry of the icon to 200 days.
Conclusion
We can use the serve-favicon
middleware to cache requests for favicon and serve it instead of loading it every time when users make a request for the favicon.
The expiry can also be set so the favicon request result won’t be cached forever.
It should be included before other middleware so that it won’t conflict with other middleware that makes request for a favicon.