express.js favicons not showing up

David picture David · Jun 23, 2014 · Viewed 7.2k times · Source

I'm currently running a simple express.js example just trying to get favicons working. Everything works fine locally but when I upload it to my production server it just shows the default favicon. I've tried clearing the cache but the production server favicon seems to not want to show up. I'm running everything on iisnode on a windows 2008 aws server.

Anyone know what the problem might be?

var express  = require('express');
var app      = express();
var port     = process.env.PORT || 3000;
var bodyParser = require('body-parser');

//for favicon
var favicon = require('serve-favicon');



app.configure(function() {
  app.use(express.favicon(__dirname + '/views/icons/favicon.ico'));
  app.use(express.static(__dirname, 'views'));
});


app.listen(port);
console.log("full path is: " + (__dirname + '/views/icons/favicon.ico'));
console.log('The magic happens on port ' + port);

Answer

Okky picture Okky · Jun 23, 2014

Install the favicon middleware and then do:

var favicon = require('serve-favicon');

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

Or better, using the path module:

app.use(favicon(path.join(__dirname,'public','images','favicon.ico'));

(note that this solution will work in express 3 apps as well)

Removed in Express 4 : app.configure()

app.configure() is no longer available. Refer to this for more info.