Простой роутинг в NodeJS


Давайте теперь будем выдавать разное содержимое при обращении к разным URL:

http.createServer((request, response) => {
if (request.url != '/favicon.ico') {
if (request.url == '/page1') {
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('1');
response.end();
}
if (request.url == '/page2') {
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('2');
response.end();
}
if (request.url == '/page3') {
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('3');
response.end();
}
}
}).listen(3000);
Очевидно, что часть кода у нас дублируется. Давайте его упростим:

http.createServer((request, response) => {
if (request.url != '/favicon.ico') {
let text;

if (request.url == '/page1') {
text = '1';
}
if (request.url == '/page2') {
text = '2';
}
if (request.url == '/page3') {
text = '3';
}

response.writeHead(200, {'Content-Type': 'text/html'});
response.write(text);
response.end();
}
}).listen(3000);
Как вы видите, у нас есть три адреса, доступных для запроса: /page1, /page2 и /page3. Давайте сделаем так, чтобы при обращении к любому другому адресу выдавалось сообщение о том, что страница не найдена:

http.createServer((request, response) => {
if (request.url != '/favicon.ico') {
let text;

if (request.url == '/page1') {
text = '1';
}
else if (request.url == '/page2') {
text = '2';
}
else if (request.url == '/page3') {
text = '3';
} else {
text = 'page not found';
}

response.writeHead(200, {'Content-Type': 'text/html'});
response.end();
}
}).listen(3000);
Чтобы браузер и поисковые системы правильно обрабатывали отсутствие страницы, мы должны для существующей страницы отдавать статус 200, а для не существующей - 404. Давайте сделаем это:

http.createServer((request, response) => {
if (request.url != '/favicon.ico') {
let text;
let status;

if (request.url == '/page1') {
text = '1';
status = 200;
}
else if (request.url == '/page2') {
text = '2';
status = 200;
}
else if (request.url == '/page3') {
text = '3';
status = 200;
} else {
text = 'page not found';
status = 404;
}

response.writeHead(status, {'Content-Type': 'text/html'});
response.end();
}
}).listen(3000);
Можно упростить код следующим образом:

http.createServer((request, response) => {
if (request.url != '/favicon.ico') {
let text;
let status = 200;

if (request.url == '/page1') {
text = '1';
}
else if (request.url == '/page2') {
text = '2';
}
else if (request.url == '/page3') {
text = '3';
} else {
text = 'page not found';
status = 404;
}

response.writeHead(status, {'Content-Type': 'text/html'});
response.end();
}
}).listen(3000);