Как добавить значок для Content-Type: application/json

Я использую node.js и реализую API, который возвращает ответ в виде Content-Type: application/json вот так:

module.exports = {
    api: (req, res) => {
        let data = {"data": [1, 2, 3]};
        res.status(200).json(data);
    }
}

Но нет значка, который можно было бы просмотреть при попытке использовать этот API в браузере. Я вижу другой сайт, который может это сделать.

Как добавить фавиконку в Node.js API с помощью Content-Type: application/json?

expressjs.com/en/resources/middleware/serve-favicon.html это?
cmgchess 11.05.2023 14:18

у вас может быть общедоступная папка в корне с фавиконкой внутри и использовать app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); перед маршрутами. я проверял работает

cmgchess 11.05.2023 14:57

@cmgchess применяется ко всем URL-адресам подпути?

Jordy 11.05.2023 14:59

да, используя его поверх всех маршрутов, он будет применяться ко всем маршрутам. это то, что вы имели в виду?

cmgchess 11.05.2023 15:00

у тебя получилось?

cmgchess 11.05.2023 16:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
160
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете просто добавить свой favicon.ico в корневую папку вашего API, и, возможно, браузер его подхватит. В противном случае нет возможности иметь значок для API (который не следует просматривать в браузере в первую очередь, поэтому никто не заботится о значках для API...)

Вы имеете в виду в одной папке с package.json?

Jordy 11.05.2023 14:10

Таким образом, файл должен быть доступен по адресу http://hostname/favicon.ico.

Salman A 23.05.2023 11:31

Во-первых, попробуйте поместить файл .ico в общую папку.

Во-вторых, установите имя файла. Например, если имя файла фавикона file.ico, то

<link rel = "shortcut icon" href = "%PUBLIC_URL%/file.ico"/>

Я надеюсь, что это поможет вам.

Вы предлагаете вставить <link rel= ... /> в необработанный ответ json? Или в заголовках http? Если нет, то где еще?

Philippe 23.05.2023 19:21

Вы можете использовать промежуточное ПО, подобное предоставленному в пакете express-favicon, которое будет обслуживать файл favicon.ico перед обработчиками маршрутов API.

например

const favicon = require('express-favicon');
app.use(favicon(__dirname + '/public/favicon.png'));
Ответ принят как подходящий

Не могу поверить, что люди предлагают какой-то пакет для этой простой операции.

Все браузеры запрашивают /favicon.ico поиск фавикона, поэтому вы должны ответить на этот запрос.

app.get('/favicon.ico', (req, res) => {
  res.sendFile(path.join(__dirname, 'assets/favicon.ico'))
})

app.get('/api/foo', (req, res) => {
  res.json({ foo: 'bar' })
})

Примечание: я использовал фавикон Duckduckgo.

Это на самом деле позволяет вам отправлять фавикон формата png/gif, если вы хотите его использовать.

Salman A 25.05.2023 15:04

Создайте файл значка: начните с создания файла значка в формате ICO или PNG. Фавикон обычно представляет собой небольшое изображение, представляющее ваш веб-сайт или API. Вы можете использовать инструмент редактирования изображений, чтобы создать или преобразовать существующее изображение в нужный формат. Сохраните файл фавикона под соответствующим именем, например «favicon.ico» или «favicon.png». Подача файла значка: в вашем API Node.js вам необходимо обслуживать файл значка, когда браузер его запрашивает.

const path = require('path');
app.use('/favicon.ico', express.static(path.join(__dirname, 'path/to/favicon.ico')));

Запрос favicon — это отдельный запрос, который браузер делает всякий раз, когда вы загружаете страницу с вашего веб-сайта (может быть сделан и вне браузера). Он не зависит от других запросов, которые обслуживает ваш сервер (в вашем случае конечная точка API, обслуживающая ответ application/json).

Самый простой способ сделать это — обработать запрос, как и любой другой, в вашем приложении:

app.get('/favicon.ico', (req, res) => {
      res.sendFile(
         //Path to the favicon file
      );
})

Однако вам нужно будет установить поведение кэширования, если это необходимо.

Вы также можете использовать пакет express’ serve-favicon, который упрощает настройку кэширования, а также обрабатывает другие вещи (например, установку правильного Content-Type и т. д.).

Другие вопросы по теме