2016-09-17 1 views
2

Я использую HTTP-модуль Node.js для создания сервера, и мне интересно, как установить значок favicon (ярлык) на HTTP-сервере? Я просмотрел это, и я увидел, что Express может установить значок, но я не нашел никакого HTTP-решения.Установить favicon в HTTP-сервере?

Как это сделать? (Без перехода на Экспресс)

+1

Вы должны уточнить ваш вопрос. Что вы подразумеваете под «настройкой значка»? Для меня это означает «служение», и, видимо, @noisypixy думал то же самое. –

+0

Если это не «служение» значка, то я подозреваю, что он больше связан со стороной HTML. – noisypixy

+0

@philippe_b «Обслуживание» значка означает, что вы показываете его в теле HTML-страницы. «Настройка» значка означает отображение значка в левой части вкладки, куда идет значок. – baranskistad

ответ

4

Она сводится к следующему:

  • Если запрашиваемый путь является то, что ваш фавиконки, служить ему.
  • В противном случае сделайте все, что вы делаете, с запросами.

Если вы не измените путь к фавиконки в HTML-документе, браузеры (обычно) сделать запрос на /favicon.ico пути для того, чтобы получить фавиконки вашего сервера.

Это означает, что обслуживание вашего значка на /favicon.ico достаточно часто.

Предполагая, что ваш Favicon находится в ./public/favicon.ico, и будет подан на /favicon.ico пути на вашем сервере, вы можете сделать что-то вроде этого:

var http = require('http'); 
var path = require('path'); 
var fs = require('fs'); 
var url = require('url'); 

var server = http.createServer(); 

// Location of your favicon in the filesystem. 
var FAVICON = path.join(__dirname, 'public', 'favicon.ico'); 

var server = http.createServer(function(req, res) { 
    var pathname = url.parse(req.url).pathname; 

    // If this request is asking for our favicon, respond with it. 
    if (req.method === 'GET' && pathname === '/favicon.ico') { 
    // MIME type of your favicon. 
    // 
    // .ico = 'image/x-icon' or 'image/vnd.microsoft.icon' 
    // .png = 'image/png' 
    // .jpg = 'image/jpeg' 
    // .jpeg = 'image/jpeg' 
    res.setHeader('Content-Type', 'image/x-icon'); 

    // Serve your favicon and finish response. 
    // 
    // You don't need to call `.end()` yourself because 
    // `pipe` will do it automatically. 
    fs.createReadStream(FAVICON).pipe(res); 

    return; 
    } 

    // This request was not asking for our favicon, 
    // so you can handle it like any other request. 

    res.end(); 
}); 

// Listen on port 3000. 
// 
// This line is not relevant to this answer, but 
// it would feel incomplete otherwise. 
server.listen(3000); 
+0

Я пытаюсь установить значок, а не подавать его. – baranskistad

+3

@bjskistad Я нахожу этот ответ разумным, даже если это не то, что вы хотите. Если вы уменьшите это, я советую вам отменить это. –

+0

Я отредактировал его, чтобы быть более дружелюбным к новичкам, на всякий случай. Тем не менее, я не особо против этого. – noisypixy