[Node.js] Jak obsłużyć request-a pytającego o favicon.ico ?

Programowanie, Web Developer
[Node.js] Jak obsłużyć request-a pytającego o favicon.ico ?

W przypadku, gdy nasza aplikacja w Node.js nie posiada ikonki „favicon.ico”, a nie chcemy mieć niezbyt eleganckiego błędu nieznalezienia pliku konieczne jest zastosowanie obsługi ikony.

Możemy zrobić to na wiele sposobów i wszystko zależy od tego jak napisana jest nasza aplikacja jednak w najprostszym przypadku mamy serwer http, który serwuje np. html-a. W takim przypadku wystarczy obsłużyć request-a, który przyszedł z zapytaniem o ikonę np. w poniższy sposób:

if (req.url === '/favicon.ico') {
    res.writeHead(200, {'Content-Type': 'image/x-icon'} );
    res.end();
    console.log('favicon requested');
    return;
}

Dla prostego przypadku wyglądało by to następująco:

var http = require('http');

http.createServer(function (req, res) { 

    if (req.url === '/favicon.ico') {
        res.writeHead(200, {'Content-Type': 'image/x-icon'} );
        res.end();
        return;
    }

    res.writeHead(200, {'Content-Type': 'text/plain'} );
    res.write('Hello, world!');
    res.end();
  
}).listen(8000);

W przypadku gdy mamy aplikację napisaną z wykorzystaniem frameworka Expressjs może wyglądać to następująco:

...
var app = express();
...

app.use(function(req, res, next) {

    if (req.url === '/favicon.ico') {

        res.sendStatus(200);
        res.send();
        return;
    }

    next();
});