SPRINT 10. Роутинг на Node.js

Код и шаблон:

Результат проверки кода

Проверка доступна после покупки курса!

Материалы

Task 01

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

Task 02

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

Task 03

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

Task 04

Материалы доступны после покупки курса.

Task 05

Материалы доступны после покупки курса.

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

Проверка доступна после покупки курса!