Як встановити спеціальний фавікон в Експресі?


136

Нещодавно я почав працювати в Node.js, і у файлі app.js є такий рядок:

app.use(express.favicon());

Тепер, як я можу створити власний користувальницький favicon.ico?


3
Переконайтеся, що правильно очистити кеш-пам’ять браузера, інакше ви можете не побачити його зміни
vsync

Використання app.use(express.favicon())в Express 4 дає: Більшість проміжних програм (як, наприклад, Favicon) більше не входять у комплект із Express і повинні встановлюватися окремо. Перегляньте сторінку github.com/senchalabs/connect#middleware . Крім того, ви не можете поставити фавікон за допомогою: app.get('/favicon.ico', (req, res) => res.status(200)) Express js запобігти GET /favicon.ico
користувач

Відповіді:


239

У експресі 4

Встановіть програмне забезпечення favicon і виконайте наступні дії :

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

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

Або краще, використовуючи pathмодуль:

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

(зауважте, що це рішення буде працювати і в експрес-3 додатках)

У експресі 3

Відповідно до API, .faviconприймає параметр розташування:

app.use(express.favicon("public/images/favicon.ico")); 

У більшості випадків ви можете цього (як запропонував vsync):

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

Або ще краще, використовуйте path модуль (як запропонував Друска):

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

Чому фавікон краще, ніж статичний

Відповідно до опису упаковки :

  1. Цей модуль зберігає піктограму в пам'яті для підвищення продуктивності, пропускаючи доступ до диска.
  2. Цей модуль пропонує ETag основі вмісту значка, а не властивості файлової системи.
  3. Цей модуль буде працювати з найбільш сумісними Content-Type.

1
Дякую! Ви б не хотіли відкрити випуск, щоб я міг подивитися там? Сподіваємось, що лише шлях шляху, а саме, що в path.join(__dirname, "public")результаті об'єднуються рядки без роздільника? Чим менший зразок, тим швидше ми можемо це виправити (тому, якщо ви можете, будь ласка, просто приєднайтеся).
Бенджамін Груенбаум

Яка користь використовувати ще одне проміжне програмне забезпечення (яке підтримується тим, хто не може насправді підтримувати його в майбутньому) замість більш семплістичного способу, поясненого Едуардо ?
ЛукаM

3
@LucaM насамперед - гарне запитання! serve-favicon підтримується нами (фондом Node.js) і Дугом (який підтримує експрес) - тобто саме тими ж людьми, які пишуть і підтримують експрес. Ви можете побачити readme чому, але в основному: ведення журналів, кешування, керування ETag та правильне Content-Type. Ви можете побачити, що це робить тут . Як ви вважаєте, чи є заслуга в редагуванні цього відповіді?
Бенджамін Груенбаум

1
Дякую Бенджаміну за очищення функцій очистив favicon . Я б написав це у прийнятій відповіді, хоча це суворо не потрібно.
ЛукаМ

36

Не потрібні додаткові середні продукти. Просто використовуйте:

app.use('/favicon.ico', express.static('images/favicon.ico'));

1
Так, цього має бути достатньо, і це правильна відповідь, оскільки додаткове проміжне програмне забезпечення для цього відчуває себе надмірним.
jlstr

1
@jlstr це як 20 рядків коду, про яку надмірність ви маєте на увазі)) І це сторона сервера, тому кількість малих залежностей не має значення. А згадане проміжне програмне забезпечення передбачає : 1) кешування пам’яті 2) встановлення належного ETag 3) встановлення належногоContent-Type
maxkoryukov

18

смайлик Favicon для запобігання помилок:

 //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/

потім замініть значення значка 64 значень

загальна інформація про те, як створити персоналізовану піктограму вибраного

піктограми створюються за допомогою Photoshop або Inkscape, можливо, Inkscape, а потім Photoshop для яскравості та корекції кольорів (у меню зображення-> налаштування).

для швидкого значка перейдіть на сторінку http://www.clker.com/ та виберіть векторну векторну ілюстрацію та завантажте як svg. потім перенесіть його в Inkscape ( https://inkscape.org/ ) та змініть кольори або видаліть деталі, можливо, додайте щось із іншого зображення векторного кліпарта, потім для експорту виберіть деталі для експорту та натисніть файл> експортувати, виберіть розмір, наприклад 16x16 фавікон або 32х32. для подальшого редагування 128x128 або 256x256. Пакет ico може мати кілька значків розміру всередині. він може мати поряд з 16x16 пікселями фавікон високу якість піктограм для посилання на веб-сайт.

то, можливо, покращуйте зображення у фотошопі. як вібрація, ефект скосу, кругла маска, що завгодно.

потім завантажте це зображення на один із веб-сайтів, які генерують фаворити. Є також програми для Windows для редагування подібних значків https://sourceforge.net/projects/variicons/ .

додати фавікон на веб-сайт. просто покладіть favicon.ico як файл у кореневу папку домену. наприклад, у node.js у загальнодоступній папці, що містить статичні файли. це не повинно бути нічого особливого, як код вище простого файлу.


1
Цей підхід найкращий. Я просто використав файл для обслуговування замість base64: fs.createReadStream ("./ public / favicon.ico"). Pipe (res);
DaafVader

2
Чому б просто не використовувати express.favicon, оскільки ваш уже використовує express ?? Навіщо створювати цілий маршрут, якщо ви можете так само добре використовувати статичну папку? Крім того, ця чарівна струна (ваш смайлик) не робить вашу справу кращою.
SubliemeSiem

1
Вам не потрібен код, щоб поставити фавікон. Просто помістіть його як файл у каталог статичних файлів.
Шимон Дудкін

16

Немає потреби в користувацьких проміжних програм ?! У експресі:

 //you probably have something like this already    
app.use("/public", express.static('public')); 

Потім опублікуйте свою загальнодоступну публіку та додайте наступний рядок у голову html:

<link rel="icon" href="/public/favicon.ico">

1
Це DaafVader. Це спрацювало. Моє налаштування було: app.use (express.static ('public')). Я зберег фавікон у img thats у загальній папці. У своєму HTML-файлі в головному розділі я використав <link rel = "icon" href = "/ img / favicon.ico"> де favicon.ico було моїм іменем мого favicon.
Nhon Ha

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

У мене він працював локально, __dirname +але не міг змусити його працювати на моєму розгорнутому сервері.


спробуйapp.use(express.favicon('./public/images/favicon.ico'));
Алексіс Діел


4

Якщо у вас встановлений статичний шлях, просто використовуйте <link rel="icon" href="https://stackoverflow.com/images/favicon.ico" type="image/x-icon">у своїх поданнях. Не потрібно нічого іншого. Переконайтеся, що у вас є папка із зображеннями всередині загальнодоступної папки.


1
Просто переконайтесь, що ви використовуєте 127.0.0.1замість localhostGoogle Chrome, поки ви розробляєте, чомусь виправили це для мене.
cprcrack

1

Встановити express-faviconпрограмне забезпечення:

npm install express-favicon --save

Використовуйте його так:

const favicon = require('express-favicon');
app.use(favicon(__dirname + 'favicon.ico'));

1

Ви повинні встановити проміжне програмне забезпечення для обслуговування фавікону.

Я спробував це зараз:

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

і повернув це повідомлення про помилку:

Помилка: Більшість проміжних програм (як, наприклад, Favicon) більше не входять у комплект із Express та мають бути встановлені окремо. Перегляньте https://github.com/senchalabs/connect#middleware .

Я думаю, ми можемо сприймати це як остаточне.


0

Перелічений нижче код працює:

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

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

Просто переконайтесь, що оновити веб-переглядач або очистити кеш.


0

крок 0: додайте код нижче до app.js або index.js

app.use("/favicon.ico", express.static('public/favicon.ico'));

крок 1: завантажте значок звідси https://icons8.com/ або створіть свій власний
крок 2: перейдіть на сторінку https://www.favicongenerator.com/
крок 3 : завантажте завантажений файл icon.png> встановіть 16px> створити favicon>
крок 4 завантаження : перейдіть до папки завантажень, ви знайдете [.ico файл], перейменуйте його як favicon.ico
крок 5: скопіюйте favicon.ico у загальнодоступному каталозі ви створили
крок 6: додайте нижче код у свій файл .pug під заголовком тегу, під тегом заголовка

<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">

крок 7: зберегти> перезапустити сервер> закрити браузер> повторно відкрити браузер> з'явиться favicon

ПРИМІТКА. Ви можете використовувати інше, ніж favicon,
            але переконайтеся, що ви змінили ім'я в коді та в загальнодоступній папці.


0

У app.js:

app.use(express.static(path.join(__dirname, 'public')));

Припускаючи, що піктограма знаходиться у "/public/images/favicon.ico", додайте наступне посилання в голові html:

<link rel='icon' href='/images/favicon.ico' class='js-favicon'>

Це чудово спрацювало в проекті, автоматично створеному командою:

express my-project

0

Якщо ви хочете отримати рішення, яке не передбачає зовнішніх файлів і не використовує express.static(наприклад, суперлегкий веб-сервер та один файл), ви можете використовувати 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 результатом кодування файлу Favicon як Base64. Є багато сайтів, які можуть робити це в Інтернеті, шукати.

Зауважте, що вам може знадобитися перезапустити сервер та / або веб-переглядач, щоб побачити його роботу localhost, і жорсткий оновити / очистити кеш браузера, щоб побачити його роботу в Інтернеті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.