Unit 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, теперь наше приложение может реагировать на типы запроса и введенные адреса - т.е. скелет полноценного сервера под сайт получили. Теперь можно добавить вычитку данных на страницах из базы, и сайт готов. Данные действия будем проводить в следующем юните, а пока - внизу вас ждут Домашние задания.

Домашнее задание

Загрузка ДЗ на проверку возможна только после приобретения курса.

Task 1.

Создайте сервер на порту 3000. Сервер должен принимать GET запросы.

Task 2.

Сервер должен реагировать на запрос /main - возвращая строку 'main'. Обработкой данного запроса занимается функция main.

Task 3.

Сервер должен реагировать на запрос /about - возвращая строку 'about'. Обработкой данного запроса занимается функция about.

Task 4.
Задача доступна после приобретения курса.
Task 5.
Задача доступна после приобретения курса.

Следи за новостями курсов на нашем канале

Открыть

Правила оформления домашних заданий

Открыть

Форум по задачам

Forum