SPRINT 10 . Роутинг на Node.js
Материалы
Текст
Роутинг на Node.js
Сегодня мы будем создавать роутинг на чистой node.js без использования express. Давайте обрисуем задачу - создать сервер на node.js, который будет реагировать на GET и POST запросы и отвечать на них.
Для реализации подключим модули url, http.
const http = require('http');
const url = require('url');
Для понимания адреса, который приходит в запросе, нам нужно сделать парсинг req.url.
http.createServer(function (req, res) {
let urlParts = url.parse(req.url);
console.log(urlParts.pathname);
}).listen(3000);
Теперь зная urlParts.pathname мы можем выполнять любые действия на сервере. Давайте добавил внутрь сервера switch, который и будет реализовывать роутинг:
switch (urlParts.pathname) {
case "/":
homepage(req, res);
break;
case "/about":
about(req, res);
break;
default:
page404(req,res);
break;
}
Где homepage, about, page404 - это функции, которые будут реагировать на данные адреса.
function homepage(req, res) {
res.end("homepage");
}
function about(req, res) {
res.end("about");
}
function page404(req, res) {
res.end("404");
}
Добавим в роутен на нативной node.js возможность реагировать на тип запроса - GET, POST, а на другие запросы отвечать 404. Весь код приложения выглядит так:
const http = require('http');
const url = require('url');
http.createServer(function (req, res) {
let urlParts = url.parse(req.url);
// console.log(urlParts);
console.log('==========================');
console.log(urlParts.pathname);
console.log('==========================');
if (req.method == 'GET') {
switch (urlParts.pathname) {
case "/":
homepage(req, res);
break;
case "/about":
about(req, res);
break;
default:
page404(req,res);
break;
}
}
else if (req.method == 'POST') {
switch (urlParts.pathname) {
case "/about":
about2(req, res);
break;
default:
page404(req,res);
break;
}
}
else {
page404(req,res);
}
}).listen(3000);
console.log("Server running at http://localhost:3000/");
function homepage(req, res) {
res.end("homepage");
}
function about(req, res) {
res.end("about");
}
function about2(req, res) {
res.end("about post");
}
function page404(req, res) {
res.end("404");
}
Подведем итог, мы написали роутер на node.js, теперь наше приложение может реагировать на типы запроса и введенные адреса - т.е. скелет полноценного сервера под сайт получили. Теперь можно добавить вычитку данных на страницах из базы, и сайт готов. Данные действия будем проводить в следующем юните, а пока - внизу вас ждут Домашние задания.
TASKS
Создайте сервер на порту 3000. Сервер должен принимать GET запросы.
Сервер должен реагировать на запрос /main - возвращая строку 'main'. Обработкой данного запроса занимается функция main.
Сервер должен реагировать на запрос /about - возвращая строку 'about'. Обработкой данного запроса занимается функция about.