57 votes

Impossible de modifier le favicon avec Express.js

C'est une question vraiment basique, mais j'essaie de changer le favicon de mon application node.js/Express avec

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

et je reçois toujours la favicon par défaut. C'est dans mon app.configure fonction, et oui, j'ai vérifié qu'il y a es a favicon.ico en el /public/images/favicon.ico Il n'y a rien à propos d'un favicon.ico dans la console, ce qui me porte à croire que cette ligne de code est ignorée. Tout le reste de la fonction (définition du port, du répertoire des vues, du moteur de modèles, etc.) semble fonctionner correctement, alors pourquoi cette ligne de code ne serait-elle pas exécutée ?

Ce que j'ai essayé

  • Vider le cache du navigateur
  • Redémarrer le terminal et exécuter node app.js à nouveau
  • Ajout de { maxAge: 2592000000 } comme décrit aquí

Merci d'avance.

Mise à jour : J'ai réussi à le faire fonctionner. Voir ma réponse ci-dessous pour plus d'informations.

83voto

gtmtg Points 1289

J'ai essayé de visiter le site dans Safari pour la première fois (j'utilise normalement Chrome) et j'ai remarqué qu'il affichait le favicon correct. J'ai essayé de vider mon cache dans Chrome à nouveau (deux fois), sans succès, mais après avoir effectué d'autres recherches, j'ai trouvé que Apparemment, les favicons ne sont pas stockées dans le cache. . J'ai "rafraîchi ma favicon" en utilisant la méthode décrite aquí et ça a marché !

Voici la méthode (modifiée à partir du lien ci-dessus), au cas où le lien disparaîtrait :

  1. Ouvrez Chrome/le navigateur qui pose problème
  2. Naviguez directement vers le fichier favicon.ico, par ex. http://localhost:3000/favicon.ico
  3. Actualisez l'URL favicon.ico en appuyant sur F5 ou sur le bouton d'actualisation (rechargement) du navigateur approprié.
  4. Fermez le navigateur et ouvrez votre site web - voilà, votre favicon a été mis à jour !

8 votes

Je ne peux pas croire que cela ne figure pas dans la documentation du module serve-favicon. Cela semble très important, d'autant plus que cette réponse a 41 votes positifs. Merci d'avoir créé des liens vers ces ressources !

1 votes

+1 pour cela. Ça marche comme un charme ! Je me suis bousculé toute une semaine. Toute forme d'effacement du cache du navigateur ne fonctionne pas.

1 votes

Le lien "méthode décrite ici" est mort pour moi pourquoi ne pas décrire la méthode elle-même ? J'ai ajouté une réponse quant à ce qui a fonctionné pour moi ci-dessous.

35voto

user976647 Points 321

Ce qui a marché pour moi finalement :

Regardez que le

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

est au début de la fonction de configuration de l'application . Je l'avais avant à la fin. Comme le dit la documentation de l'Express : "L'ordre dans lequel les intergiciels sont "définis" à l'aide de la fonction app.use() est très important, ils sont invoqués séquentiellement, ce qui définit la préséance de l'intergiciel".

Je n'ai pas eu besoin de définir un âge maximum.

Pour le tester :

  • Redémarrez le serveur avec node app.js
  • Videz le cache du navigateur
  • Rafraîchissez le Favicon en y accédant directement en utilisant "localhost:3000/votre_chemin_vers_le_favicon/favicon.ico" et en rechargeant.

3 votes

Avec une toute nouvelle application sans aucune modification, utilisez ceci : app.use(express.favicon('public/images/favicon.ico')) ;

0 votes

Si vous partez d'un modèle, assurez-vous de remplacer toutes les instances précédentes de app.use(express.favicon()) ;. J'ai constaté que lorsqu'elle était dupliquée, elle ne fonctionnait pas correctement.

1 votes

Express.favicon n'est plus utilisé avec express 4, voir erreur Error : La plupart des intergiciels (comme favicon) ne sont plus fournis avec Express et doivent être installés séparément. Vous devez github.com/expressjs/serve-favicon

19voto

captDaylight Points 635

La réponse ci-dessus n'est plus valable .

Si vous utilisez

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

Vous obtiendrez cette erreur :

Error: Most middleware (like favicon) is no longer bundled with Express and must be installed separately

Ce que vous allez devoir faire, c'est prendre servir-favicon .

exécuter

npm install serve-favicon --save

puis ajoutez ceci à votre application

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

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

2 votes

Cela devrait être la réponse acceptée ! "--save" signifie inclure les dépendances, voir ici : stackoverflow.com/questions/19578796/

1voto

zemirco Points 5419

Avez-vous essayé de vider le cache de votre navigateur ? L'ancien favicon est peut-être encore dans le cache.

0voto

med116 Points 30

Comment faire sans express :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X